js的遍历器(Iterator)
js的遍历器(Iterator)是什么
JavaScript 原有的表示“集合”的数据结构,主要是数组(Array
)和对象(Object
),ES6 又添加了Map
和Set
。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map
,Map
的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。
遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
注意:无法直接通过索引的方法访问。
Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of
循环,Iterator 接口主要供for...of
消费。
Iterator 的遍历过程是这样的。
(1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
(2)第一次调用指针对象的next
方法,可以将指针指向数据结构的第一个成员。
(3)第二次调用指针对象的next
方法,指针就指向数据结构的第二个成员。
(4)不断调用指针对象的next
方法,直到它指向数据结构的结束位置。
也就是说:每一次调用next
方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value
和done
两个属性的对象。其中,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...of
,for...of
会自己去找数据结构中的Symbol.iterator
属性来进行遍历。没有Symbol.iterator
属性的,且没在Symbol.iterator
属性中部署遍历器生成方法的,for...of
无法进行遍历。这样看来,其实for...of
就算是在遍历遍历器的成员。
注意:遍历器一般都用for...of
和next()方法来取得遍历器里的值。
js的遍历器(Iterator)相关推荐
- ES6之遍历器Iterator
目录 一.什么是遍历器 二.如何部署遍历器 三.遍历器的应用 1. 解构赋值 2. 扩展运算符 3. Iterator与Generator函数 4. return和throw 总结 一.什么是遍历器 ...
- es6 迭代器(遍历器)Iterator 自定义遍历器 lterator/简单模拟values方法 for of运行机制 Array/Set/Map默认迭代器接口 对象设置迭代器
文章目录 迭代器 Iterator 用处 (需要自定义遍历数据的时候) 自定义 遍历器 lterator 简单模拟values方法 Array Set Map 默认迭代器接口 entries valu ...
- 遍历器 Iterator
遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员) I ...
- 第十四节:ES6的 Iterator 遍历器到底是什么?
对一个事物足够热爱,才会有这样的热情... 冲着这位同学的学习热情,前端君今晚就给大家再来一发. for...of为啥不遍历Object对象 第十三节我们讲了简单又实用的for...of,我们可以使用 ...
- Iterator遍历器和原生可遍历
1. Iterator遍历器 ①Iterator是一个遍历器(迭代器),是一个统一的遍历方式.Iterator寻找是找不到,该方法在对象原型链上可以找到,Symbol.iterator():调用该方法 ...
- js map遍历 修改对象里面的值_求职季之你必须要懂的原生JS(上)
点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 互联网寒冬之际,各大公司都缩减了HC,甚至是采取了"裁员"措施,在这样的大环境 ...
- Iterator遍历器的使用
Iterator遍历器的作用 JS语言中包含众多具有"集合"性质的数据结构--比如数组.对象.Set以及Map等,很多时候用户会将其进行组合使用,比如数组里边嵌套对象,或是数组里边 ...
- Iterator 遍历器的简单使用
Object接口 实现Iterator 我们可以使用 ES6 的展开运算符 - 和 for-of- 去遍历带有 Iterator 接口的数据结构,需要注意的是,Object 本身不具备 Iterato ...
- 【ES6】Set Map数据结构、Iterator遍历器
Set() Set类似于数组,但是成员的值都是唯一的,没有重复的值.Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); let arr = [2, 3, ...
最新文章
- 图像拼接--Construction and Refinement of Panoramic Mosaics with Global and Local Alignment
- 迷你世界电锯机器人_迷你世界:会旋转的机器人,安装多个火箭炮,全方位轰炸敌人...
- java nio的使用
- Trial accounts of SAP Cloud Platform do not provide an Identity Authentication tenant
- nodejs调试ndb_如何开始使用NDB调试NodeJS应用程序
- Pycharm设置utf-8自动显示
- Multi-thread--C++11中thread的使用
- 安装与配置OCS服务器时可能会出现的问题
- 华为主题锁屏壁纸换不掉_华为手机的不明照片是哪来的?这几个设置得关闭,否则128G也不够...
- 判断一个很大的数是否是11的倍数(2种做法)
- java记忆翻牌_html5记忆翻牌游戏
- vue基于file-saver处理二进制文件流,导出文件
- STorM32 BGC 三轴云台学习(一) 通信协议分析
- 2021年CSS 实用手册
- PM,RD,FE,UE,UI,QA等开发常见部门简称
- antd表格显示分页怎么取消_react + Ant Design 实现table表格分页和删除
- 手机html己停用怎么办,Apple ID被停用怎么办?“Apple ID 已停用”解决办法
- 9. Simulink系统仿真
- .netFramewo 4.0软件报 未能加载文件或程序集“System.Core, Version=2.0.5.0错误处理
- 客房软件_客房内部如何运作?
热门文章
- 不用代码,10分钟会采集微博、微信、知乎、58同城数据和信息
- harmonyos源码下载,1.7.OpenHarmonyOS源码下载
- 美团前端一面高频面试题
- js实现enter键tab功能
- Modelsim10.6d安装破解有问题
- Chromium网页加载过程
- 米兔机器人魔方_你知道米兔指尖积木都有什么玩法么?最后一个小编都没想到...
- 你做过哪些勇敢的事?
- office2016必须安装在c盘
- ASP.NET+Sql Server超市商品管理系统1300源代码+设计文档+说明文档