Javascript 为什么“for x in”不能按预期工作?

Javascript 为什么“for x in”不能按预期工作?,javascript,Javascript,许多编程语言使用“for x in”语法来迭代列表/数组 它也存在于JavaScript中。但是,以下代码: var arr = [5, 6, 9, 10]; for (var i in arr) { console.log(i); } 与其他编程语言不同,输出数组“arr”的索引,而不是数组本身的元素 我的问题是为什么?或者JavaScript中这种行为的逻辑是什么 我的问题是为什么?或者JavaScript中这种行为的逻辑是什么 大概是因为相同的原因,+表示加法而不是减法。换句话说

许多编程语言使用“for x in”语法来迭代列表/数组

它也存在于JavaScript中。但是,以下代码:

var arr = [5, 6, 9, 10];
for (var i in arr) {
    console.log(i);
}
与其他编程语言不同,输出数组“arr”的索引,而不是数组本身的元素

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

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

大概是因为相同的原因,+表示加法而不是减法。换句话说,因为这就是它被指定的含义


Javascript具有具有属性的对象,这个特性在JS历史的早期(大约20年前)就被包括在内,作为迭代这些属性的一种方式。在数组的情况下,索引恰好与属性相对应。

您要查找的是arr的fori。这将迭代数组并给出数组中每个元素的值

或者,如果要在arr中使用fori,可以将数组元素称为arr[i],因为在这种情况下,i只是索引

下面是所有案例的一个片段

var-arr=[5,6,9,10]; console.log'let i of arr,log i:'; 让我来看看{ console.logi; } console.log'let i in arr,log i:'; 因为我让你进来{ console.logi; } console.log'let i in arr,log arr[i]:'; 因为我让你进来{ console.logarr[i];
}这只是ECMAScript规定的行为;因此,它适用于比JavaScript更多的语言,而且肯定不限于NodeJ。如果您想枚举值而不是属性名,则需要查找而不是。这个问题是许多其他问题的重复。我将补充一点:迭代一个对象将得到它的键,你可以使用这些键来获得值。如果它给出了值,则无法获取密钥。为了一致性,数组的工作方式是相同的。不,@Chris G,它不是那样工作的-因为…in仅用于对象,而OP中的arr是一个对象。在示例代码中,它也是一个数组这一事实是巧合的。@Guss即使我没有真正开始我的评论,我也会编造一些东西,我看不出你说的和我写的有什么矛盾。我在任何地方都没有说过for…in不仅适用于对象。node.js不是一种语言。它是一个实现JavaScript语言的引擎。