我正在尝试使用for-in语法循环遍历数组。问题是,这些数字正在转换为字符串。
for(var element in [0]) {
document.write(typeof(element)); // outputs "string"
}
这是标准行为吗?我可以想出一些解决它的方法,但我真的只是在寻找解释,以扩展我对JavaScript的理解。
答案 0 :(得分:5)
我认为你误解了JavaScript for...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];
// ...
}
答案 1 :(得分:1)
答案 2 :(得分:0)
for-in
语句枚举对象的属性。在您的情况下,element
是属性的名称,它始终是一个字符串。