【发布时间】:2015-05-30 21:48:03
【问题描述】:
我知道什么是for... in 循环(它迭代键),但我第一次听说for... of(它迭代值)。
我对@987654327@ 循环感到困惑。
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 ... of被引入到语言中以解决将for ... in与数组一起使用的问题。Array.prototype可以修改为额外的属性可用,这使得迭代它们变得不安全,因为你可能会得到你没想到的非数字键。 -
对于未来的读者:这可能不是 JavaScript
ofKeyword (for…of loops) 的重复,因为它询问的是功能的特定行为,而不是询问一般概述。 -
习惯说“
for <key> in”和“for <value> of”,意识到IE不支持for..of -
关于可枚举medium.com/@shivamethical/…的好文章
标签: javascript arrays for-loop object