ES6 Iterator

作者: 嘻哈章鱼小丸子 | 来源:发表于2022-05-19 16:52 被阅读0次
是什么

一种接口,为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

作用
  • 为各种数据结构,提供一个统一的、简便的访问接口
  • 使得数据结构的成员能够按某种次序排列
  • ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费
默认Iterator 接口

ES6 规定,默认的Iterator接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。Symbol.iterator属性本身是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。至于属性名Symbol.iterator,它是一个表达式,返回Symbol对象的iterator属性,这是一个预定义好的、类型为 Symbol 的特殊值,所以要放在方括号内。

特征
  • 根本特征:一种指针对象,具有next方法。每次调用next方法,都会返回一个代表当前成员的信息对象,具有valuedone两个属性。value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
  • 除了具有next方法,还可以具有return方法和throw方法。
    • 如果自己写遍历器对象生成函数,next方法必须部署,returnthrow方法可选部署。return()方法必须返回一个对象,这是 Generator语法决定的。
      return方法的使用场合:
      • for...of循环提前退出(通常是因为出错,或者有break语句)
      • 一个对象在完成遍历前,需要清理或释放资源
    • throw()方法主要是配合 Generator 函数使用,一般的遍历器对象用不到这个方法。
最简单实现

使用 Generator 函数,只要用 yield 命令给出每一步的返回值即可。

let obj = {
  * [Symbol.iterator]() {
    yield 'hello';
    yield 'world';
  }
};

for (let x of obj) {
  console.log(x);
}
内置类型
  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList对象
场景
  • 解构赋值:默认调用
  • 扩展运算符(...)
  • yield*
  • 其他任何接受数组作为参数的场合
    • for...of
    • Array.from()
    • Map(), Set(), WeakMap(), WeakSet()(比如new Map([['a',1],['b',2]]))
    • Promise.all()
    • Promise.race()
参考文章

Symbol.iterator
ES6 入门 Iterator 和 for...of 循环

相关文章

  • es6解读6- Iterator 和 for...of 循环

    es6 Iterator 和 for...of 循环 什么是Iterator接口 ES6中内置了一些Symbol,...

  • Generator(二)

    内建Iterator Iterator是ES6的重要组成部分,因此,对许多内建类型你不需要自己创建迭代器,ES6已...

  • 『ES6脚丫系列』遍历器iterator

    『ES6脚丫系列』遍历器iterator本文内容如下: 具有iterator接口的数据结构 【01】原生就具有It...

  • es 常用基础小节--(二)

    上次突然来活儿,现在接着继续: 3.iterator iterator迭代器是另外4个ES6常用特性的实现基础(解...

  • es6解读6- Iterator 和 for...of 循环

    什么是Iterator接口 ES6中内置了一些Symbol,其中最重要的一个恐怕就是Symbol.iterator...

  • JS Iterator(遍历器)

    ES6 规定,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性,或者说,一个数...

  • JS新特性

    ES ES5 ES6 箭头函数 Promise Symbol属性 Iterator Generator async...

  • [JavaScript] generator

    ES6中的generator返回一个iterator/iterable,由“function*”定义,genera...

  • ES6 - Iterator

    遍历器(Iterator)是为各种不同的数据结构提供统一的访问机制的一种接口任何数据结构只要部署 Iterator...

  • ES6 - Iterator

    本文参考:《ECMAScript 6入门》阮一峰 概念:Iterator是一种接口,为各种不同的数据结构提供统一的...

网友评论

    本文标题:ES6 Iterator

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