Tat*_*nen 73 javascript arrays loops
给出一个简单的基于零的数字索引数组:
var list = ['Foo', 'Bar', 'Baz'];
Run Code Online (Sandbox Code Playgroud)
很多时候,我注意到有人建议循环遍历数组中的变量,如下所示:
for(var item in list) { ... }
Run Code Online (Sandbox Code Playgroud)
......几乎可以肯定有人认为这是不好的做法,并提出了另一种方法:
var count = list.length;
for(var i = 0; i < count; i++) {
var item = list[i];
...
}
Run Code Online (Sandbox Code Playgroud)
不使用上面更简单的版本并使用第二个例子的原因是什么?
Tim*_*own 89
首先,循环的顺序未定义for...in
,因此不能保证属性将按您想要的顺序迭代.
其次,for...in
迭代对象的所有可枚举属性,包括从其原型继承的属性.对于数组,如果您的代码或页面中包含的任何库增加了原型,这可能会影响您Array
,这可能是一个真正有用的事情:
Array.prototype.remove = function(val) {
// Irrelevant implementation details
};
var a = ["a", "b", "c"];
for (var i in a) {
console.log(i);
}
// Logs 0, 1, 2, "remove" (though not necessarily in that order)
Run Code Online (Sandbox Code Playgroud)