JavaScript杂谈之iterator for循环
来源:互联网 发布:阿里云国际版注册 编辑:程序博客网 时间:2024/05/17 03:00
iterator
为了给表示集合的数据结构如数组、对象、set、map等定义一个统一的接口,方便进行统一的遍历,ES6新增了一种遍历器机制即iterator。其作用有三个,提供统一便利的访问接口,是数据结构成员按照一定次序排列,供for of使用遍历。调用遍历器后其会返回一个含有value和done两个属性的对象,value代表当前成员值,done为布尔值代表当前是否完成遍历,同时对象还存在一个next方法遍历下一个有效值,return方法如果遍历中途退出就会调用return,用于清理或释放资源,throw方法主要配合Generator函数使用,下面给出一个简单实现。
let makeIterator = function(){ let index = 0; return { next(){ return index < array.length ? {value: array[++index]}: {done: true} } }}
同时,ES6提供了三类数据结构的iterator的原生接口,数组、某些类似数组对象、set和map,不过类数组对象中并没有直接存在[Symbol.iterator]方法(至少nodelist没有,string有),这是一个函数,运行后可以生成iterator遍历器,在我们可以简单地将
Nodelist[Symbol.iterator] = new Set()[Symbol.iterator]
当然,iterator接口除了for of的使用场景之外,另外还有几种,我们简单介绍一下:1.在进行数组和set的解构赋值时会调用iterator方法2.扩展运算符会调用iterator3.yield*如果后面跟一个可遍历数据结构,则调用iterator4.由于数组的遍历会用到遍历器接口,所以任何接受数组作为参数的地方都使用了遍历器
for of
与for in循环形式类似,不过for in是活的对象键名,而for of直接调用iterator接口活的键值,应用范围也是可以拥有iterator接口的数据结构,这里可能会用到转化为数组的方法[Array.from](可以参考我之前的文章)entries()返回一个遍历器对象,用于遍历[键名,键值]组成的数组.keys()返回一个遍历器对象,用于遍历键名.values()一个遍历器对象,用于遍历键值.最后看一下js所有的遍历语法所以js又提供了foreach循环方法,但是foreach循环无法中途退出循环。所以for of应运而生,且配合iterator统一接口更加封装性进行遍历。
0 0
- JavaScript杂谈之iterator for循环
- 深入解读JavaScript中的Iterator和for-of循环
- es6 javascript的Iterator 和 for...of 循环
- javascript之for循环(一)
- javascript之for循环(二)
- ES6学习笔记之Iterator和for...of循环
- ES6系列之---Iterator和for...of循环
- for循环的iterator方式
- Iterator和for循环对比
- Iterator和for...of循环
- JavaScript快速上手之8:for 循环
- 关于 for循环和Iterator遍历
- Iterator和for循环的使用
- for(){}与iterator()遍历循环的区别
- Java的Iterator和for-each 循环
- ES6--Iterator和for...of循环
- ECMAScript6标准Iterator和for...of循环
- ECMAScript6笔记:Iterator和for...of循环
- 仿图书管理系统
- eos7.6安装与环境配置
- Retrofit2.0介绍使用封装
- 常用缓存框架比较
- 279. Perfect Squares
- JavaScript杂谈之iterator for循环
- 编程思想
- Windows下C语言开发环境配置(一):MinGW的简介和安装
- 九度-1054-字符串内排序
- centOS中安装hadoop伪分布式(二)
- 小小的led驱动和测试程序
- 微信JSSDK分享接口中wx.config 出现invalid signature问题的解决办法
- ADV7611调试的一些细节
- 一个界面里面有多个UITextField时,点击每个UITextField都会进入textFieldShouldBeginEditing delegate方法