ES6中的迭代器iterator

什么是迭代器?

统一的遍历数据的方式。

首先获取到迭代器的指针,初始时这个指针指向的是第一条数据之前。通过调用指针的next()方法,使指针指向下一条数据。每一个next()都会返回一个对象,其中包含两个属性,value表示想要获取的值,done是个布尔值,false表示当前指针指向有值,true表示当前遍历结束。

支持迭代器的数据类型?

Array、Map、Set、String、TypedArray、函数的arguments对象、Nodelists对象

Array数据获取迭代器的方法

entries()

通过调用entries()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{value : {索引:值}, done : false/true}

values()

通过调用values()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value : 值,  done : false/true}}

keys()

通过调用keys()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value : 索引,  done : false/true}}

[Symbol.iterator]()

可迭代对象中默认包含一个Symbol.iterator属性,是一个函数。通过调用[Symbol.iterator]()方法返回一个迭代器,此迭代器的next()方法每次返回的数据--{{value值,  done : false/true}}

如何为自定义对象添加迭代器?

var obj = {
        name:'ashen',
        age:21,
        [Symbol.iterator]:function(){
        let i = 0;
        let keys = Object.keys(this); // 获取当前对象的所有属性并形成一个数组
        return {
            next: function(){
                return {
                    value:keys[i++], // 外部每次执行next都能得到数组中的第i个元素
                    done:i > keys.length // 如果数组的数据已经遍历完则返回true
                }
            }
        }
    }
}

迭代器的应用场景

  • 解构赋值
  • 扩展运算符
  • for..of..循环
  • 。。。
posted @ 2020-04-16 17:34  ashen1999  阅读(168)  评论(0编辑  收藏  举报