ES6的Iterator对象详解

Iterator完成道理

  1. 建立一个指针对象,指向当前数据构造的肇端位置。也就是说,遍历器对象本质上,就是一个指针对象。

  2. 第一次挪用指针对象的next要领,能够将指针指向数据构造的第一个成员。

  3. 第二次挪用指针对象的next要领,指针就指向数据构造的第二个成员。

  4. 不停挪用指针对象的next要领,直到它指向数据构造的完毕位置。

每一次挪用next要领,都邑返回数据构造的当前成员的信息。具体来说,就是返回一个包括value和done两个属性的对象。个中,value属性是当前成员的值,done属性是一个布尔值,示意遍历是不是完毕。

ES6 里的迭代器并非一种新的语法或者是新的内置对象(组织函数), 而是一种协定,一切遵照了这个协定的对象都能够称之为迭代器对象,所以说迭代器是一种协定,一个一致的接口规范,两个属性都不返回值也不会报错,然则不符合协定规范了,就不能称作迭代器了

怎样布置Iterator接口

在ES6中,有三类数据构造原生具有Iterator接口:数组、某些相似数组的对象、Set和Map构造,对象(Object)之所以没有默许布置Iterator接口,是因为对象的哪一个属性先遍历,哪一个属性后遍历是不确定的,须要开发者手动指定。

Iterator接口布置在对象的Symbol.Iterator属性上, 能够挪用这个属性,就取得遍历器对象。

     var arr = ['a', 'b', 'c'];
     var iterator = arr[Symbol.iterator]();
     var a = iterator.next();
     console.log(a)   //{value: 'a', done: false}

for–of与for–in

for...in 遍历每个属性称号,而 for...of遍历每个属性值。

在对象没有布置Iterator接口的情况下挪用for…of会报错。当一个布置了Iterator接口的对象挪用for…of时,
完成的步骤是如许的:

  1. 挪用对象的Symbol.Iterator的属性取得遍历器天生函数;

  2. 挪用遍历器天生函数返回遍历器对象
    实在for…of就相当于一向挪用遍历器对象的next要领,直到返回done为true;

    原文作者:gg_bomb
    原文地址: https://segmentfault.com/a/1190000005765280
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞