2

可能的重复:
带有数组的 JavaScript “For ...in”

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

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

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

4

3 回答 3

5

我认为您误解了 JavaScriptfor...in的作用。它不会遍历数组元素。它迭代对象属性。JavaScript 中的对象有点像其他语言中的字典或散列,但以字符串为键。特别是数组被实现为具有从0到整数的属性的对象N-1- 但是,由于所有属性名称都是字符串,因此索引也是如此。

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

因此,[2]如果我们忽略从 继承的东西Array,则与{ "0": 2 }.

for..in将遍历属性名称,这将选择"0",而不是2.

现在,你问,如何迭代Arrays?通常的方法是:

var arrayLen = array.length;
for (var i = 0; i < arrayLen; i++) {
  var el = array[i];
  // ...
}
于 2011-05-23T19:20:01.160 回答
1

这是重复为什么在数组迭代中使用“for...in”是一个坏主意?

于 2011-05-23T19:20:41.620 回答
0

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

于 2011-05-23T19:19:53.160 回答