JavaScript Iterator协议包含可迭代协议和迭代器协议两层:前者要求对象实现[Symbol.iterator]无参方法并返回符合后者规范的对象;后者强制next()方法返回{value, done}结构对象,done为true时value必须为undefined。

JavaScript 中 Iterator 协议不包含“方法”本身,而是一套规范性约定,核心围绕两个层级展开:可迭代协议(Iterable Protocol)和迭代器协议(Iterator Protocol)。它不依赖具体类或接口,而是靠特定符号和返回结构来达成统一行为。
可迭代协议的关键:[Symbol.iterator] 方法
一个对象要成为可迭代对象,必须在其上定义 [Symbol.iterator] 属性,该属性是一个无参函数,调用后必须返回一个符合迭代器协议的对象。
- 这个方法本身没有参数,也不要求返回特定类型,只要返回值满足迭代器协议即可
- 内置类型如 Array、Map、Set、String 都已实现该方法
- 自定义对象只需挂载该方法,就能被 for...of、... 扩展运算符、Array.from() 等消费
迭代器协议的关键:next() 方法
由 [Symbol.iterator]() 返回的对象,必须具备 next() 方法。这是唯一强制要求的接口方法,且必须严格遵循返回格式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 每次调用 next() 必须返回一个对象,结构为 { value: any, done: boolean }
- done: true 表示遍历结束;之后再调用 next(),仍需返回 { value: undefined, done: true }
- value 是当前元素值;若 done 为 true,value 应为 undefined(规范明确要求,不可省略或设为 null)
协议不要求其他方法,但支持扩展
原生 Iterator 协议只规定 [Symbol.iterator] 和 next()。像 map()、filter() 这类链式操作属于 Iterator Helpers 提案(目前处于 Stage 3),是迭代器实例上的额外原型方法,并非协议本身的一部分。
立即学习“Java免费学习笔记(深入)”;
- 它们是对原生协议的增强,不是必需项
- 使用前需确认运行环境是否支持(如 Chrome 120+、Node.js 20.10+)
- 不支持时可通过 Array.from(it).map(...) 降级处理

















