什么是 Iterator
- Iterator 是迭代器,规定了数据类型的遍历 for of
- 如果一个数据类型实现了 Iterator ,那么这个数据类型就可以使用for of遍历
- 如果一个数据类型实现了 Iterator ,那么这个对象上就会有一个 Symbol.iterator 属性
-
let arr = [1, 2, 3];
console.log(arr[Symbol.iterator]); // [Function: values]
- Symbol.iterator 是一个函数,执行该函数会返回一个可迭代对象 let it = arr[Symbol.iterator]()
- 可迭代对象有一个 next 方法,执行这个方法会返回一个对象给我们 console.log(it.next()); // { value: 1, done: false }
- Array 、String 等这些数据类型已经实现了 Iterator ,可以使用for of 遍历
Iterator基本使用
- 默认一个对象没有实现 Iterator ,无法通过 for of 遍历
1 let obj = {
2 name: 'zhangsan',
3 age: 66,
4 }
5 for (let value of obj) {
6 console.log(value); // TypeError: obj is not iterable
7 }
let obj = {
name: 'zhangsan',
age: 66,
[Symbol.iterator]() {
let index = 0;
let that = this;
return { // 返回一个可迭代对象
next() {
if (index < Object.keys(that).length) {
return {value: that[Object.keys(that)[index++]], done: false}
} else {
return {value: undefined, done: true}
}
}
}
}
}