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

38 浏览
0 Comments

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

这个问题已经在这里有答案:

可能是重复问题:

JavaScript“ For ... in”与数组

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

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

这是标准行为吗?我可以想到一堆方法来解决它,但我真正想要的是解释,以扩展我对JavaScript的理解。

admin 更改状态以发布 2023年5月24日
0
0 Comments
0
0 Comments

我觉得你误解了JavaScript中for...in的作用。它并不是迭代数组元素,而是迭代对象属性。JavaScript中的对象类似于其他语言中的字典或哈希表,但由字符串作为键。特别是,数组被实现为具有整数属性的对象,整数的范围是从0N-1 - 但是,由于所有属性名都是字符串,因此,深入底层,索引也是字符串。

现在,让我们举个与[0]稍有不同的例子,因为这里的索引与值相一致。我们讨论的是[2]

因此,如果我们忽略从Array继承的内容,[2]{ "0": 2 }几乎是一样的。

for..in将迭代属性名称,这将获取"0",而不是2

现在,你会问如何迭代Array。一般的方法是:

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

0