ES6遍历器 生成器 学习整理

遍历器[迭代器](Iterator)

就是这样一种机制。它是一种接口,为各类不一样的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就能够完成遍历操做(即依次处理该数据结构的全部成员)。数组

Iterator 的做用有三个:数据结构

一、是为各类数据结构,提供一个统一的、简便的访问接口;函数

二、是使得数据结构的成员可以按某种次序排列;spa

三、是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费。code

示例代码orm

//迭代器示例
function  newIterator(arr) {
  let index = 0;

  return {
    next:()=>{
      if(index<arr.length){
        return {value:arr[index++]}
      }
      return {value:'无数据值'}
      
    }
  }
}

const nit=newIterator(['第一次','第二次','第三次']);

console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)
console.log( nit.next().value)


/**
输出结果

第一次
第二次
第三次
无数据值
无数据值
**/
给某一实例增长迭代器

Symbol.iterator属性自己是一个函数,就是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。至于属性名Symbol.iterator,它是一个表达式,返回Symbol对象的iterator属性,这是一个预约义好的、类型为 Symbol 的特殊值,因此要放在方括号内对象

Symbol 是 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值blog

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

生成器函数 Generator

生成器函数语法能够理解为对迭代器简化,为了更便捷的使用迭代器而出现的生成器函数。用来达到语法层面的代码精简;接口

Generator 能够看做是数据结构,更确切地说,能够看做是一个数组结构,由于 Generator 函数能够返回一系列的值,这意味着它能够对任意表达式,提供相似数组的接口。部署

示例代码

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

var hw = helloWorldGenerator();
 
 
/** 执行结果
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true }
**/

for...of循环能够自动遍历 Generator 函数时生成的Iterator对象,且此时再也不须要调用next方法。

相关文章
相关标签/搜索