我知道什么是 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"
。为什么?
原文由 Mukund Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议
for in
循环遍历对象的可枚举属性名称。for of
(ES6 中的新功能)确实使用了一个 特定于对象的 迭代器 并循环由它生成的值。在您的示例中, 数组迭代器 确实产生了数组中的所有值(忽略非索引属性)。