JavaScript迭代器是统一遍历接口,通过next()返回{value, done}对象;手动实现需提供符合规范的Symbol.iterator方法;生成器函数用yield简化迭代器创建。
JavaScript 迭代器(Iterator)是一种统一的遍历接口,它让不同数据结构(如数组、Map、Set、字符串等)能用相同方式被逐个访问元素。核心是实现 next() 方法,返回形如 { value: 当前值, done: 是否结束 } 的对象。
一个对象只要拥有符合规范的 Symbol.iterator 方法,并返回一个带有 next() 方法的对象,就是可迭代的。你可以手动构造一个简单迭代器:
例如,为普通数组封装一个只返回偶数索引元素的迭代器:
const evenIndexIterator = arr => ({
r]() {以下类型原生具备 Symbol.iterator,可直接用于 for...of、扩展运算符(...)、解构等:
有了迭代器,你不需要手动调用 next(),JavaScript 提供了更简洁的消费方式:
[...mySet] 转成数组const [a, b] = new Set([1,2])
注意:Object 默认不可迭代。想遍历对象属性,需用 Object.keys(obj)、Object.entries(obj) 等先转成数组,或手动添加 Symbol.iterator。
function* 声明的生成器函数会自动返回一个迭代器对象,用 yield 暂停并产出值,极大简化复杂迭代逻辑:
function* countdown(n) {生成器还能配合 yield* 委托其他可迭代对象,适合组合多个数据源。