-
Iterator(遍历器、迭代器) 对象需要包含一个next方法-
该方法返回一个对象
-
value表示当前结果 -
done表示是否可以继续迭代
-
let it = makeIterator();
function makeIterator() {
let nextIndex = 0;
return {
next: function() {
return nextIndex < 5 ?
{value: nextIndex++, done: false} :
{value: undefined, done: true};
}
};
}
可遍历的(iterable)
- 如果数据结构的
Symbol.iterator属性是一个方法,且该方法返回Iterator对象
interface Iterable {
[Symbol.iterator]() : Iterator,
}
interface Iterator {
next(value?: any) : IterationResult,
}
interface IterationResult {
value: any,
done: boolean,
}
实例
let obj = {
[Symbol.iterator]:makeIterator
}
默认调用 Iterator 接口,即Symbol.iterator方法
-
for...of循环 -
数组解构
-
扩展运算符
-
yield* -
其他隐式调用的地方
new Set(['a','b']),Promise.all()等
默认为可遍历对象,即默认部署Symbol.iterator属性
-
Array
-
Map
-
Set
-
String
-
函数的 arguments 对象
-
NodeList 对象