js的遍历器(Iterator)是什么

JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了MapSet。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是MapMap的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。

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

注意:无法直接通过索引的方法访问。

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

Iterator 的遍历过程是这样的。

(1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

(2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

(3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

(4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。

也就是说:每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含valuedone两个属性的对象。其中,value属性是当前成员的值(这个值是在创建遍历器时存进去的,根据创建遍历器时,定义的value的值而定),done属性是一个布尔值,表示遍历是否结束。

Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环。当使用for...of循环遍历某种数据结构时,该循环会自动去寻找 Iterator 接口。for...of中的value就是遍历器中的value.所以只要是有Iterator接口,就可以用for...of方法。

一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”(iterable)。

原生具备 Iterator 接口的数据结构如下。

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

这些都有一个Symbol.iterator属性,可以直接通过这个方法来直接创建一个遍历器。也就是说,这些只具备接口,还不是遍历器,但是我们可以通过这个方法更方便的创建一个遍历器。

let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
//遍历器对象才能用next()
iter.next() // { value: 'a', done: false }
iter.next() // { value: 'b', done: false }
iter.next() // { value: 'c', done: false }
iter.next() // { value: undefined, done: true }

但是,如果用for...offor...of会自己去找数据结构中的Symbol.iterator属性来进行遍历。没有Symbol.iterator属性的,且没在Symbol.iterator属性中部署遍历器生成方法的,for...of无法进行遍历。这样看来,其实for...of就算是在遍历遍历器的成员。

注意:遍历器一般都用for...of和next()方法来取得遍历器里的值。

js的遍历器(Iterator)相关推荐

  1. ES6之遍历器Iterator

    目录 一.什么是遍历器 二.如何部署遍历器 三.遍历器的应用 1. 解构赋值 2. 扩展运算符 3. Iterator与Generator函数 4. return和throw 总结 一.什么是遍历器 ...

  2. es6 迭代器(遍历器)Iterator 自定义遍历器 lterator/简单模拟values方法 for of运行机制 Array/Set/Map默认迭代器接口 对象设置迭代器

    文章目录 迭代器 Iterator 用处 (需要自定义遍历数据的时候) 自定义 遍历器 lterator 简单模拟values方法 Array Set Map 默认迭代器接口 entries valu ...

  3. 遍历器 Iterator

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

  4. 第十四节:ES6的 Iterator 遍历器到底是什么?

    对一个事物足够热爱,才会有这样的热情... 冲着这位同学的学习热情,前端君今晚就给大家再来一发. for...of为啥不遍历Object对象 第十三节我们讲了简单又实用的for...of,我们可以使用 ...

  5. Iterator遍历器和原生可遍历

    1. Iterator遍历器 ①Iterator是一个遍历器(迭代器),是一个统一的遍历方式.Iterator寻找是找不到,该方法在对象原型链上可以找到,Symbol.iterator():调用该方法 ...

  6. js map遍历 修改对象里面的值_求职季之你必须要懂的原生JS(上)

    点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 互联网寒冬之际,各大公司都缩减了HC,甚至是采取了"裁员"措施,在这样的大环境 ...

  7. Iterator遍历器的使用

    Iterator遍历器的作用 JS语言中包含众多具有"集合"性质的数据结构--比如数组.对象.Set以及Map等,很多时候用户会将其进行组合使用,比如数组里边嵌套对象,或是数组里边 ...

  8. Iterator 遍历器的简单使用

    Object接口 实现Iterator 我们可以使用 ES6 的展开运算符 - 和 for-of- 去遍历带有 Iterator 接口的数据结构,需要注意的是,Object 本身不具备 Iterato ...

  9. 【ES6】Set Map数据结构、Iterator遍历器

    Set() Set类似于数组,但是成员的值都是唯一的,没有重复的值.Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); let arr = [2, 3, ...

最新文章

  1. 图像拼接--Construction and Refinement of Panoramic Mosaics with Global and Local Alignment
  2. 迷你世界电锯机器人_迷你世界:会旋转的机器人,安装多个火箭炮,全方位轰炸敌人...
  3. java nio的使用
  4. Trial accounts of SAP Cloud Platform do not provide an Identity Authentication tenant
  5. nodejs调试ndb_如何开始使用NDB调试NodeJS应用程序
  6. Pycharm设置utf-8自动显示
  7. Multi-thread--C++11中thread的使用
  8. 安装与配置OCS服务器时可能会出现的问题
  9. 华为主题锁屏壁纸换不掉_华为手机的不明照片是哪来的?这几个设置得关闭,否则128G也不够...
  10. 判断一个很大的数是否是11的倍数(2种做法)
  11. java记忆翻牌_html5记忆翻牌游戏
  12. vue基于file-saver处理二进制文件流,导出文件
  13. STorM32 BGC 三轴云台学习(一) 通信协议分析
  14. 2021年CSS 实用手册
  15. PM,RD,FE,UE,UI,QA等开发常见部门简称
  16. antd表格显示分页怎么取消_react + Ant Design 实现table表格分页和删除
  17. 手机html己停用怎么办,Apple ID被停用怎么办?“Apple ID 已停用”解决办法
  18. 9. Simulink系统仿真
  19. .netFramewo 4.0软件报 未能加载文件或程序集“System.Core, Version=2.0.5.0错误处理
  20. 客房软件_客房内部如何运作?

热门文章

  1. 不用代码,10分钟会采集微博、微信、知乎、58同城数据和信息
  2. harmonyos源码下载,1.7.OpenHarmonyOS源码下载
  3. 美团前端一面高频面试题
  4. js实现enter键tab功能
  5. Modelsim10.6d安装破解有问题
  6. Chromium网页加载过程
  7. 米兔机器人魔方_你知道米兔指尖积木都有什么玩法么?最后一个小编都没想到...
  8. 你做过哪些勇敢的事?
  9. office2016必须安装在c盘
  10. ASP.NET+Sql Server超市商品管理系统1300源代码+设计文档+说明文档