可能的重复:
带有数组的 JavaScript “For ...in”
我正在尝试使用 for-in 语法来循环遍历一个数字数组。问题是,这些数字正在转换为字符串。
for(var element in [0]) {
document.write(typeof(element)); // outputs "string"
}
这是标准行为吗?我可以想出很多方法来解决它,但我真的只是在寻找解释,以扩展我对 JavaScript 的理解。
可能的重复:
带有数组的 JavaScript “For ...in”
我正在尝试使用 for-in 语法来循环遍历一个数字数组。问题是,这些数字正在转换为字符串。
for(var element in [0]) {
document.write(typeof(element)); // outputs "string"
}
这是标准行为吗?我可以想出很多方法来解决它,但我真的只是在寻找解释,以扩展我对 JavaScript 的理解。
我认为您误解了 JavaScriptfor...in
的作用。它不会遍历数组元素。它迭代对象属性。JavaScript 中的对象有点像其他语言中的字典或散列,但以字符串为键。特别是数组被实现为具有从0
到整数的属性的对象N-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];
// ...
}
该for-in
语句枚举对象的属性。在您的情况下element
是属性的名称,它始终是一个字符串。