根据 ES6,JavaScript 数组迭代器本身是否可迭代



以下内容适用于我检查过的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可迭代吗?也就是说,规范是否需要它?

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

你可以!核心对象的所有标准迭代器都扩展了%IteratorPrototype%,其中专门定义了:

25.1.2.1 %迭代器原型% [ @@iterator ] ( (

采取以下步骤:

  1. 返回this值。

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

因此,

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

相关内容

最新更新