Possible Duplicate:
JavaScript “For …in” with Arrays
我正在尝试使用 for-in 语法来循环遍历数字数组。问题是,这些数字正在转换为字符串。
for(var element in [0]) {
document.write(typeof(element)); // outputs "string"
}
这是标准行为吗?我可以想出很多方法来解决它,但我实际上只是在寻找解释,以扩展我对 JavaScript 的理解。
最佳答案
我认为你误解了 JavaScript for...in
的作用。它不会迭代数组元素。它迭代对象属性。 JavaScript 中的对象有点像其他语言中的字典或哈希,但由字符串作为键控。特别是,数组被实现为对象,其属性是从 0
到 N-1
的整数 - 但是,由于所有属性名称都是字符串,因此深层次的索引也是如此.
现在让我们举一个与 [0]
不同的示例,因为这里的索引与值一致。我们来讨论一下[2]
。
因此,如果我们忽略从 Array
继承的内容,[2]
与 { "0": 2 }< 几乎相同
.
for..in
将迭代属性 names,它将选取 "0"
,而不是 2
.
现在,您问,如何迭代Array
?通常的做法是:
var arrayLen = array.length;
for (var i = 0; i < arrayLen; i++) {
var el = array[i];
// ...
}
关于JavaScript For-each/For-in 循环改变元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101817/