ES6语法之 Iterator

一、概念:Iterator(遍历器)为不同的数据类型提供统一的访问机制,只要部署了 Iterator 接口(原型上有 Symbol.iterator 方法),就可以完成遍历操作,遍历操作主要通过 for of 完成。

let arr = [1,2,3];
//使用for of 完成遍历
for(var i of arr){
console.log(i);//1 2 3
}

二、具备Iterator 接口的数据类型:原生具备 Iterator 接口的数据结构主要有 Array、Set 、Map、String 、NodeList、函数的arguments对象、TypedArray,这类数据结构的原型上都有 Symbol.iterator 方法。

let arr = [1,2,3];
console.log(arr)//打印出来的部分截图如下

let arr = ['a', 'b'];
let iter = arr[Symbol.iterator]();
iter.next() // { value: 'a', done: false }
iter.next() // { value: 'b', done: false }
iter.next() // { value: undefined, done: true }

三、不具备 Iterator 接口的数据类型:对象不具备 Iterator 接口,在 ES6 中可以使用 Map 数据结构。如果要在 ES5 中可以被 for of 遍历,就必须在 Symbol.iterator 的属性上部署遍历器生成方法。

   function Person(name) {
        this.name =  name;
        this.next = null;
    };
    Person.prototype = {
        [Symbol.iterator]() {
            let self = this;
            return {
                next:function next(){
                    if (self) {
                        var val = self.name;
                        self = self.next;
                        return {
                            value: val,
                            done: false
                        };
                    } else {
                        return { value: undefined, done: true };
                    }
                }
            };
        }
    }
    var one = new Person('张三');
    var two = new Person('李四');
    var three = new Person('王五');
    one.next = two;
    two.next = three;
    for(var i of one){
        console.log(i)//张三 李四 王五
    }

猜你喜欢

转载自blog.csdn.net/weixin_44135121/article/details/89164846