目录
1. 迭代器
- 迭代协议:规定了迭代与实现的逻辑
- 迭代器:具体的迭代实现逻辑
- 迭代对象:可被迭代的对象 - 实现了[Symbol.iterator]方法
- 迭代语句:
for…in:以原始插入的顺序迭代对象的可枚举属性
for…of:根据迭代对象的迭代器具体实现迭代对象数据
2. 迭代器的实现原理 - Symbol.iterator
Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。
当需要对一个对象进行迭代时(比如开始用于一个for…of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。
如Array类型:
let array = ["a", "b", "c", "d"];
for (value of array) {
console.log(value);
}
>a
>b
>c
>d
而Object类型则没有:
let objs = {
a: 1,
b: 2,
c: 3
};
for (obj of objs) {
console.log(obj);
}
>[报错]:Uncaught TypeError: objs is not iterable at ...
3. 采用Symbol.iterator实现某个类型的迭代的模板
obj[Symbol.iterator] = function () {
return {
next() {
return {
done