可直接解构next()返回对象获取value和done属性:value为yield产出的值或return返回值,done为布尔值表示是否结束;解构提升可读性,配合while循环可清晰控制迭代流程。

可以利用 next() 方法返回的迭代器结果对象,直接解构出 value 和 done 属性,从而获知当前控制流的位置(是否结束)和携带的载荷(yield 出的值)。
解构 next() 返回的对象
next() 总是返回一个形如 { value: any, done: boolean } 的对象。你可以用对象解构语法一次性提取这两个关键字段:
-
value:即生成器函数中yield表达式产出的数据,也就是“载荷” -
done:布尔值,true表示生成器已执行完毕,控制流到达末尾;false表示还有后续yield或尚未 return
在 for...of 循环外手动调用时解构
当你不使用 for...of(它自动处理迭代),而是显式调用 next() 时,解构能提升可读性:
function* counter() {
yield 1;
yield 2;
return 'done';
}
<p>const it = counter();
const { value, done } = it.next(); // { value: 1, done: false }
console.log(value); // 1
console.log(done); // false</p>
配合 while 循环逐次读取位置与载荷
用解构 + while 可清晰表达“只要没结束,就继续取值”这一逻辑:
- 每次解构
next()结果,done控制循环退出时机 -
value即当前 yield 的载荷,可直接参与业务逻辑 - 注意:
return后的值也会作为最后一次next()的value,但done为true
避免常见误解
需注意两点:
-
done: true不代表“没有值”,而是表示“迭代结束”,此时value仍可能有返回值(来自return或隐式undefined) - 解构时若未提供默认值,对已结束的迭代器连续调用
next()仍返回{ value: undefined, done: true },不会报错











