javascript - for..in 数组上的循环也会迭代原型(prototype)函数

标签 javascript arrays loops for-loop

我遇到了一个以前从未见过的严重错误。首先我有一个简单的数组:

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在调试器中显示:

  1. Loop: i = 0; item = 123;
  2. Loop: i = 1; item = 456;
  3. Loop: i = 2; item = 789;
  4. Loop: i = compare;
  5. Loop: i = union;
  6. Loop: i = remove;
  7. Loop: i = select;
  8. Loop: i = contains;

所以我认为这就是原型(prototype)函数。但为什么?有什么想法吗?

正如我提到的,我以前从未见过这个......

最佳答案

Do not use for..in to iterate over Array 。这将迭代Array对象的所有可枚举属性,并且可能不会按顺序迭代它们。有两种选择:

  • Array.forEach (IE8 不支持,尽管可能有垫片)。
  • 一个简单的 for 循环

关于javascript - for..in 数组上的循环也会迭代原型(prototype)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659377/

相关文章:

C# 如何循环用户输入直到输入的数据类型正确?

javascript - 下划线 map 对象

javascript - 在模板助手中连接两个查询的结果

javascript - 读取位置指示器 - Chrome 问题

arrays - 给定两个数组,将它们二进制重叠的最有效方法是什么?

c++ - 如何用前导零填充数组?

c - 如何使用 C 语言将 + 添加为字符串?

javascript - 无法通过 Angular JS 中的 ng-click 传递 anchor 标记 ID 值。获取未定义的值

arrays - Swift:将字典组合成一个数组

javascript - 在带有闭包的循环中创建 gridster 的多个实例,以使用不同的参数调用相同的回调