加载中...

ES6 用两个协议统一了 JavaScript 的遍历机制。可迭代协议(Iterable):对象实现 Symbol.iterator 方法,调用后返回一个迭代器;迭代器协议(Iterator):对象实现 next() 方法,每次调用返回 { value, done } 形状的结果,done 为 true 表示遍历结束。
实现了可迭代协议的对象可以被一整族语法消费:for...of 循环、展开运算符 [...x]、解构赋值、Array.from、yield*,以及 Map、Set、Promise.all 等接受可迭代参数的 API。数组、字符串、Map、Set、arguments、NodeList 等内置对象均可迭代;生成器函数则是手写迭代器的语法糖,一个 function* 即可同时满足两个协议。
ES2018 增加了异步迭代协议(Symbol.asyncIterator),next() 返回 Promise,配合 for await...of 消费,Node.js 的流(Readable)即支持异步迭代。
迭代器协议把"数据结构"与"遍历方式"解耦,是 ES6 后集合类语法能够统一协作的底层契约,ES2025 的迭代器辅助方法(map/filter 等)进一步强化了惰性数据处理能力。

登录 后参与讨论
暂无讨论,来发表第一条评论吧