以下是我检查过的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是我认为的相关部分)我找不到任何说明数组迭代器应该是可迭代的,或者它必须用生成器实现。
答案 0 :(得分:3)
你可以!核心对象的所有标准迭代器都扩展%IteratorPrototype%
,它具体定义:
采取以下步骤:
- 返回
醇>this
值。此函数的
name
属性的值为[Symbol.iterator]
。
因此,当用作迭代时,每个内置迭代器都会自动返回,因此在for...of
或任何其他迭代上下文中使用它是安全的。