我有一个严重的错误,这是我以前从未见过的。首先,我有一个简单的数组:
var myArray = ["123", "456", "789"]
现在我想用for..in - 循环迭代这个数组:
function mapData(list) {
for ( var i in list) {
var item = list[i];
if (item) {
// do something
}
}
}
用mapData(myArray)调用方法后,firebug在调试器中显示:
- 循环:i = 0; item = 123;
- 循环:i = 1; item = 456;
- 循环:i = 2; item = 789;
- 循环:i =比较;
- 循环:i = union;
- 循环:i =删除;
- 循环:i =选择;
- 循环:i =包含;
醇>
所以我认为那是原型功能。但为什么?任何想法?
正如我所说,我以前从未见过这个......
答案 0 :(得分:4)
Do not use for..in
to iterate over Array。这将迭代 Array
对象的所有可枚举属性,并且可能不会按顺序迭代它们。有两种选择:
Array.forEach
(IE8不支持,虽然可能有垫片)。for
循环答案 1 :(得分:0)
那不是一个但是,你只是迭代所有可枚举的数组属性,并且你使用的库添加了Array.prototype
这样的函数:
Array.prototype.union = function(...)
可以通过使用defineProperty设置无法枚举的函数来修复库:
Object.defineProperty(Array.prototype, 'union', {value:function(){...}});
但是你永远不应该使用for..in
迭代数组。像这样迭代:
for (var i=0; i<list.length; i++) {