给定一个简单的从零开始的数字索引数组:
var list = ['Foo', 'Bar', 'Baz'];
很多时候,我注意到当有人建议像这样循环遍历数组中的变量时:
for(var item in list) { ... }
...几乎可以肯定有人认为这是不好的做法,并提出了一种替代方法:
var count = list.length;
for(var i = 0; i < count; i++) {
var item = list[i];
...
}
不使用上面更简单的版本而使用第二个示例的原因是什么?
最佳答案
首先,for...in
循环的循环顺序是未定义的,因此不能保证属性会按照您想要的顺序迭代。
其次,for...in
遍历对象的所有可枚举属性,包括从其原型(prototype)继承的属性。在数组的情况下,如果您的代码或页面中包含的任何库扩充了 Array
的原型(prototype),这可能会影响您,这可能是一件真正有用的事情:
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)
关于javascript - 为什么带有数组的 'for(var item in list)' 在 JavaScript 中被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265167/