可迭代对象需实现Symbol.iterator方法并返回符合迭代器协议的对象。1. 最简实现每次next()返回固定值后done为true;2. 可遍历内部数据如NumberRange类按范围生成数字;3. 生成器函数*iterator()可简化实现,自动满足协议。

在 JavaScript 中,只要给自定义对象添加 Symbol.iterator 方法,并让它返回一个符合迭代器协议的对象(即有 next() 方法、返回 { value, done } 形式的对象),这个对象就能被 for...of、扩展运算符([...obj])、解构、Array.from() 等语法识别为可迭代对象。
1. 实现基础的 Symbol.iterator 方法
最简实现是让对象每次调用 next() 返回一个固定值,然后标记 done: true:
const myObj = {
[Symbol.iterator]() {
let done = false;
return {
next() {
if (!done) {
done = true;
return { value: 'hello', done: false };
}
return { value: undefined, done: true };
}
};
}
};
for (const item of myObj) {
console.log(item); // 输出: 'hello'
}
2. 让对象遍历内部数据(如数组或属性)
常见需求是让对象像数组一样逐个返回自己的数据。例如封装一个只读的数字列表:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
Symbol.iterator
- ✅ 正确:每次调用
[Symbol.iterator]()都新建闭包或重置计数器 - ❌ 错误:把迭代状态(如
index)存在对象实例上,且不重置
反例(错误):
[Symbol.iterator]() { return this.items.values(); }
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










