ES6 迭代器

介绍

  1. 迭代器 iterator 是一种接口(对象的一个属性),为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。

  2. iterator 接口就是对象的一个属性,属性名 Symbol.iterator 属性值是一个函数。有了该属性就可以使用 for……of 遍历。

  3. ES6 创造了一种新的遍历命令 for……of 循环,Iterator 接口主要供 for……of 消费

  4. 原生具备 iterator 接口的数据(可用 for of 遍历)

    • Array
    • Arguments
    • Set
    • Map
    • String
    • TypeArray
    • NodeList
  5. 演示 for……of

    1
    2
    3
    4
    let arr = ['梅西','苏亚雷斯','内马尔'];
    for(let item of arr) {
    console.log(item);
    }

工作原理

  1. 创建一个指针对象,指向当前数据结构的起始位置。
  2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员。
  3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员。
  4. 每调用 next 方法返回一个包含 value 和 done 属性的对象。

自定义可迭代数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
let aggre = {
title: '集合',
items: [
'Messi','Suarez','Neymar'
],
[Symbol.iterator](){
let index = 0;
return {
next:() => {
if (index < this.items.length) {
let res = { value: this.items[index],done: false };
index++;
return res;
}
return { value: undefined,done: true };
}
}
}
}
for(let item of aggre) {
console.log(item);
}