为什么'for x in '不能按预期工作?
问题描述:
许多编程语言使用'for x in'的语法来遍历列表/数组。为什么'for x in <array>'不能按预期工作?
它也存在于JavaScript中。然而,下面的代码:
var arr = [5, 6, 9, 10];
for (var i in arr) {
console.log(i);
}
输出阵列的索引“ARR”,而不是该数组本身的元件(不像其它的编程语言)。
我的问题是为什么?或者这种行为的JavaScript逻辑是什么?
答
我的问题是为什么?或者这种行为的JavaScript逻辑是什么?
大致出于同样的原因,+
意味着加法而不是减法。换句话说,这就是它指定的意思。
Javascript具有包含属性的对象,并且此属性被包括在内(从很早以前的JS - 近二十年前)作为迭代这些属性的一种方式。恰巧在数组的情况下,索引对应于属性。
这只是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
我会做一些事情:遍历一个对象会给它的键,你可以使用它们来获取值。如果它给出的值,你不能得到钥匙。为了一致性,阵列以相同的方式工作。 –
不,@Chris G,它不会像那样工作--' for ... in'仅用于对象,OP中的'arr'是一个'Object'。示例代码中它也是一个数组的事实是巧合的。 – Guss