Iterable、Iterator、Generator 关系
Iterable、Iterator 和 Generator 的关系、协议与消费方式总览。
#type / synthesis
#status / growing
#resource / javascript
#resource / ecmascript
[!info] related notes
- 所属 MOC: ES6 新特性 MOC, ECMAScript MOC
- 前置概念: Symbol, ECMAScript迭代器和生成器
- 原子概念: Iterable, Iterator, Generator
Iterable、Iterator、Generator 关系
一句话结论
- Iterable: 能提供默认迭代器的对象
- Iterator: 通过
next()一步步产出值的对象 - Generator: 用
function*写出来的 Iterator 生成器
关系链
Iterable --[Symbol.iterator()]--> Iterator --[next()]--> value/done
为什么这三者要放一起
因为很多语言特性其实消费的是“可迭代对象”而不是单纯数组:
for...of- 展开运算符
Array.from()- 解构赋值
常见误区
- 以为 Iterable 和 Iterator 是一个东西
- 以为 Generator 是异步专用
- 以为只要有数组就能理解所有迭代协议