• 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..循环
    • 。。。
  • 相关阅读:
    Java Thread(一) Outline
    Gradle学习(四) web工程构建
    Gradle学习(三) 依赖管理基础
    Gradle学习(二) Java Plugin
    Gradle学习(一)
    二维码zxing源码分析(五)精简代码
    二维码zxing源码分析(四)wifi部分
    二维码扫描 zxing源码分析(三)result、history部分
    二维码zxing源码分析(二)decode部分
    二维码zxing源码分析(一)camera部分
  • 原文地址:https://www.cnblogs.com/ashen1999/p/12714375.html
Copyright © 2020-2023  润新知