2015-06-27 49 views
3

我有我的实验就可以了for...of语句摘录:如何对......的循环语句的工作在Javascript(ECMAScript中6)

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应该在迭代运行价值观,对吧?那么为什么第二个for不打印"hello"

回答

5

阵列在它们的元素上迭代。这就是它的定义。这就是Array[Symbol.iterator]的实现方式。

参见http://www.2ality.com/2015/02/es6-iteration.html

+0

所以你的意思是foo是一个属性,而不是一个元素。但不是数组索引,属性本身? – Ramin

+1

0和'foo'都是属性,而'3'是一个元素,但'hello'不是。元素是作为整数值属性值出现的值。 – 2015-06-27 17:39:38