为什么JS在每个函数中都给出了太多?

jef*_*ind 0 javascript for-loop object for-in-loop

这让我困扰了一段时间,请看我的jsfiddle:http://jsfiddle.net/DHR8Q/,其中包含以下javascript代码:

var id = "11111;22222;33333";

id = id.split(";");

alert(typeof id);

for (var i in id){
    alert(id[i]);
}?
Run Code Online (Sandbox Code Playgroud)

当我id用字符";" 拆分变量时,我使用for循环,我会假设i == 0,1,2因为字符串id被分成3部分,但这不是发生的事情.实际上i == 0,1,2,3,4....为什么JavaScript会这样做?

Mat*_*att 11

因为您链接的jsFiddle包含Mootools库; 它添加了自己的方法Array.prototype.

当您使用数组枚举数组时for in,它会遍历所有属性; 包括那些方法; 这就是你所看到的.

你应该检查使用hasOwnProperty(),或者更好地使用for(;;);

for (var i in id){
    if (id.hasOwnProperty(i)) {
        alert(id[i]);
    }
}?
Run Code Online (Sandbox Code Playgroud)

(的jsfiddle)

要么

for (var i=0;i<id.length;i++) {
    alert(id[i]);
}
Run Code Online (Sandbox Code Playgroud)

(的jsfiddle)