JavaScript For-each / For-in循环更改元素类型

时间:2011-05-23 19:16:30

标签: javascript foreach for-in-loop

  

可能重复:
  JavaScript “For …in” with Arrays

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

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

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

3 个答案:

答案 0 :(得分:5)

我认为你误解了JavaScript for...in的作用。它不会迭代数组元素。它迭代对象属性。 JavaScript中的对象有点像其他语言中的字典或哈希,但是用字符串键入。特别是数组实现为具有从0N-1的整数属性的对象 - 但是,由于所有属性名称都是字符串,因此索引也是深层次的。

现在让我们采用与[0]不同的示例,因为此处索引与值一致。我们来讨论[2]

因此,[2],如果我们忽略了我们从Array继承的内容,则与{ "0": 2 }几乎相同。

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

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

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

答案 1 :(得分:1)

答案 2 :(得分:0)

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