【问题标题】:JavaScript For-each/For-in loop changing element types [duplicate]JavaScript For-each / For-in循环更改元素类型[重复]
【发布时间】:2011-08-31 09:41:15
【问题描述】:
可能重复:
JavaScript “For …in” with Arrays
我正在尝试使用 for-in 语法来循环遍历一个数字数组。问题是,这些数字正在转换为字符串。
for(var element in [0]) {
document.write(typeof(element)); // outputs "string"
}
这是标准行为吗?我可以想出很多方法来解决它,但我真的只是在寻找解释,以扩展我对 JavaScript 的理解。
【问题讨论】:
标签:
javascript
foreach
for-in-loop
【解决方案1】:
for-in 语句枚举对象的属性。在您的情况下,element 是属性的名称,它始终是一个字符串。
【解决方案2】:
我认为你误解了 JavaScript for...in 的作用。它不会遍历数组元素。它迭代对象属性。 JavaScript 中的对象有点像其他语言中的字典或散列,但以字符串为键。特别是数组被实现为具有从0 到N-1 的整数属性的对象 - 但是,由于所有属性名称都是字符串,因此索引也是如此,深入人心。
现在让我们举一个与[0] 不同的例子,因为这里的索引与值一致。让我们讨论一下[2]。
因此,[2] 是,如果我们忽略从Array 继承的东西,则与{ "0": 2 } 几乎相同。
for..in 将遍历属性 names,它将获取 "0",而不是 2。
现在,你问如何迭代Arrays?通常的方式是:
var arrayLen = array.length;
for (var i = 0; i < arrayLen; i++) {
var el = array[i];
// ...
}