根据ES6,JavaScript数组迭代器本身是可迭代的吗?

时间:2017-04-15 00:58:59

标签: javascript ecmascript-6

以下是我检查过的JavaScript运行时(Node.js和Firefox):

let xs = [0, 1, 2]
let it = xs[Symbol.iterator]()
for (let x of it) console.log(x)

这是有效的,因为it迭代器本身是可迭代的,即它具有Symbol.iterator属性。可以假设这是因为Array.prototype[Symbol.iterator]被实现为生成器。

我的问题是,我可以依赖 it是否可以迭代?也就是说,是否需要规范?

我看过(this是我认为的相关部分)我找不到任何说明数组迭代器应该是可迭代的,或者它必须用生成器实现。

1 个答案:

答案 0 :(得分:3)

你可以!核心对象的所有标准迭代器都扩展%IteratorPrototype%,它具体定义:

25.1.2.1%IteratorPrototype%[@@ iterator]()

  

采取以下步骤:

     
      
  1. 返回this值。
  2.         

    此函数的name属性的值为[Symbol.iterator]

因此,当用作迭代时,每个内置迭代器都会自动返回,因此在for...of或任何其他迭代上下文中使用它是安全的。