关于foreach:JavaScript For-each / For-in循环更改元素类型

JavaScript For-each/For-in loop changing element types

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
JavaScript “For …in” with Arrays

我正在尝试使用for-in语法循环遍历一个数字数组。问题是,这些数字正在转换为字符串。

1
2
3
for(var element in [0]) {
    document.write(typeof(element)); // outputs"string"
}

这是标准行为吗?我可以想出很多方法来解决这个问题,但我只是在寻找一个解释,来扩展我对JavaScript的理解。


我认为你误解了javascript for...in的功能。它不会迭代数组元素。它迭代对象属性。JavaScript中的对象有点像其他语言中的字典或散列,但由字符串键控。尤其是数组被实现为具有从0N-1的整数属性的对象,然而,由于所有属性名都是字符串,因此索引也是深入的。

现在让我们用一个与[0]稍有不同的例子,因为这里的索引与值一致。我们来讨论一下[2]

因此,如果我们忽略了我们从Array继承的东西,那么[2]{"0": 2 }基本相同。

for..in将迭代属性名,该属性名将接收"0",而不是2

那么,如何迭代Arrays,你会问?通常的方法是:

1
2
3
4
5
var arrayLen = array.length;
for (var i = 0; i < arrayLen; i++) {
  var el = array[i];
  // ...
}


这重复了为什么在数组迭代中使用"for…in"是一个坏主意?


for-in语句枚举对象的属性。在您的情况下,element是属性的名称,它始终是一个字符串。