为什么'for x in '不能按预期工作?

为什么'for x in <array>'不能按预期工作?

问题描述:

许多编程语言使用'for x in'的语法来遍历列表/数组。为什么'for x in <array>'不能按预期工作?

它也存在于JavaScript中。然而,下面的代码:

var arr = [5, 6, 9, 10]; 
for (var i in arr) { 
    console.log(i); 
} 

输出阵列的索引“ARR”,而不是该数组本身的元件(不像其它的编程语言)。

我的问题是为什么?或者这种行为的JavaScript逻辑是什么?

+5

这只是ECMAScript规定的行为;所以它适用于比JavaScript更多的语言,它当然不限于nodejs。如果你想枚举值而不是属性名称,你正在寻找['for ... of'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Statements/for ... of)而不是['for ... in'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 。这个问题是许多其他人的重复。 – canon

+0

我会做一些事情:遍历一个对象会给它的键,你可以使用它们来获取值。如果它给出的值,你不能得到钥匙。为了一致性,阵列以相同的方式工作。 –

+0

不,@Chris G,它不会像那样工作--' for ... in'仅用于对象,OP中的'arr'是一个'Object'。示例代码中它也是一个数组的事实是巧合的。 – Guss

我的问题是为什么?或者这种行为的JavaScript逻辑是什么?

大致出于同样的原因,+意味着加法而不是减法。换句话说,这就是它指定的意思。

Javascript具有包含属性的对象,并且此属性被包括在内(从很早以前的JS - 近二十年前)作为迭代这些属性的一种方式。恰巧在数组的情况下,索引对应于属性。