我知道什么是for... in循环(它在钥匙上迭代),但我听说过for... of第一次(它迭代了值)。

我很困惑for... of环形。

var arr = [3, 5, 7];
arr.foo = "hello";
    
for (var i in arr) {
  console.log(i); // logs "0", "1", "2", "foo"
}
    
for (var i of arr) {
  console.log(i); // logs "3", "5", "7"
  // it doesn't log "3", "5", "7", "hello"
}

我明白那个for... of迭代属性值。那为什么不记录"3", "5", "7", "hello"代替"3", "5", "7"

与众不同for... in循环,迭代每个键("0", "1", "2", "foo"),还迭代foo钥匙,for... of 才不是 迭代价值foo财产,即"hello"。为什么那样?

我在这里安慰for... of环形。它应该记录"3", "5", "7","hello"但它记录了"3", "5", "7"。为什么?

示例链接

答案

for in循环对象的枚举属性名称。

for of(ES6中的新)确实使用了对象特定的迭代器并循环遍历该值生成的值。

在您的示例中,数组迭代器确实会产生数组中的所有值(忽略非索引属性)。

来自: stackoverflow.com