迭代器(Iterators) 
作用 
- 迭代器(lterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口(对象的属性:Symbol.iterator),就可以完成遍历操作。
 
特点 
1、ES6创造了一种新的遍历命令
for…of循环,lterator接口主要供for…of消费;2、原生具备iterator 接口的数据(可用for of遍历):
Array、Arguments、Set、Map、String、TypedArray、NodeList3、工作原理
1、创建一个指针对象,指向当前数据结构的起始位置
2、第一次调用对象的next方法,指针自动指向数据结构的第一个成员
3、接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
4、每调用next方法返回一个包含value和done属性的对象
注意
需要自定义遍历数据的时候,要想到迭代器
js
const arr = [1, 2, 3];
// 使用 for...of 遍历数组
for (let v of arr) {
    console.log(v); // 1,2,3
}js
const arr = [1, 2, 3];
let iterator = arr[Symbol.iterator]();
// 调用对象的next方法
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: 3, done: false}
console.log(iterator.next()); // {value: undefined, done: true}实现自定义遍历数组 
js
// 定义一个对象
const obj = {
    name: 'a',
    stus: ['测试1', '测试2', '测试3'],
    [Symbol.iterator]() {
        //索引变量
        let index = 0;
        return {
            next: () => {
                if (index < this.stus.length) {
                    const result = { value: this.stus[index], done: false };
                    index++;
                    return result;
                } else {
                    return { value: undefined, done: true };
                }
            },
        };
    },
};
for (let v of obj) {
    console.log(v); // 测试1, 测试2, 测试3
}