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

标签 javascript foreach for-in-loop

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 中的对象有点像其他语言中的字典或哈希,但由字符串作为键控。特别是,数组被实现为对象,其属性是从 0N-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/

相关文章:

javascript - 简单的 JS 练习导致浏览器崩溃

javascript - react 来自 api 的图像标题错误可能与正确的索引有关

javascript - 如果我们正在循环访问当前项目,哪个 for/forEach 的性能更高?

PHP 生成 foreach 并将其生成为数组

javascript - 在 for-in 循环中访问前一个键/值

javascript - 如何使用promise做串口任务?

javascript - 让 webfontloader 与 node.js 和 jsdom 一起工作

javascript - 在数组中查找值然后使用 Angular forEach 返回 true

swift - 快速添加对范围运算符的支持? (例如,红色...紫色的 x)

Javascript for...in 似乎只返回数组中的所有其他索引