美文网首页
ES6 - Iterator

ES6 - Iterator

作者: 恒星的背影 | 来源:发表于2018-10-05 15:05 被阅读0次

    遍历器(Iterator)是为各种不同的数据结构提供统一的访问机制的一种接口
    任何数据结构只要部署 Iterator 接口,就可以完成遍历操作
    一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”(iterable)

    默认 Iterator 接口

    ES6 规定,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性
    Symbol.iterator 属性本身是一个函数,就是当前数据结构默认的遍历器生成函数
    执行这个函数,会返回一个遍历器对象。该对象的根本特征就是具有 next 方法。每次调用 next 方法,都会返回一个代表当前成员的信息对象,具有 value 和 done 两个属性:

    const obj = {
      [Symbol.iterator] : function () {
        return {
          next: function () {
            return { value: 1, done: true };
          }
        };
      }
    };
    

    ES6 的有些数据结构原生具备 Iterator 接口:

    Array
    Map
    Set
    String
    函数的 arguments 对象
    NodeList 对象
    

    如果给类数组对象部署 Iterator 接口,可以直接引用数组的 Iterator 接口:

    let iterable = {
      0: 'a',
      1: 'b',
      2: 'c',
      length: 3,
      [Symbol.iterator]: Array.prototype[Symbol.iterator]
    };
    

    调用 Iterator 接口的场合

    for...of
    ...
    yield*
    Array.from()
    Map() , Set()
    Promise.all() , Promise.race()
    

    由于数组的遍历会调用遍历器接口,所以任何接受数组作为参数的场合,其实都调用了遍历器接口

    Iterator 接口与 Generator 函数

    for...of 循环

    ES6 借鉴其它语言,引入了 for...of 循环,作为遍历所有数据结构的统一的方法

    与其他遍历语法的比较:
    forEach:中途无法跳出循环
    for...in:为遍历对象而设计,会遍历数字键名以外的键,包括原型链上的键

    相关文章

      网友评论

          本文标题:ES6 - Iterator

          本文链接:https://www.haomeiwen.com/subject/msyxaftx.html