for…of循环语句在Javascript中如何工作?(ECMAScript 6)

for…of循环语句在Javascript中如何工作?(ECMAScript 6),javascript,loops,ecmascript-6,Javascript,Loops,Ecmascript 6,我有一个片段,我正在对它试验for…of语句: let arr = [3, 5, 7]; arr.foo = "hello"; for (let i in arr) { console.log(i); // logs "0", "1", "2", "foo" } for (let i of arr) { console.log(i); // logs "3", "5", "7" } 我的问题是,for…of应该在iterable值上运行,对吗?那么为什么的第二个不打印“hell

我有一个片段,我正在对它试验
for…of
语句:

let arr = [3, 5, 7];
arr.foo = "hello";

for (let i in arr) {
   console.log(i); // logs "0", "1", "2", "foo"
}

for (let i of arr) {
   console.log(i); // logs "3", "5", "7"
}

我的问题是,
for…of
应该在iterable值上运行,对吗?那么为什么的第二个
不打印
“hello”

数组在其元素上是可编辑的。这就是它的定义。这就是实施的方式


请参阅。

您的意思是foo是一个属性,而不是一个元素。但是属性本身不是数组索引吗?0和
foo
都是属性,而
3
是元素,而
hello
不是。元素是作为整数值属性值出现的值。