榆次小程序开发_ES6新特性二:Iterator(遍历器)和

发布时间:2021-01-12 11:55 作者:jianzhan

摘要: ES6新特点二:Iterator(解析xml器)和for-of循环系统详细说明 本文关键详细介绍了ES6新特点二:Iterator(解析xml器)和for-of循环系统,融合案例方式剖析了ES6中Iterator(解析xml器)和for-of循环系

ES6新特性二:Iterator(遍历器)和for-of循环详解       这篇文章主要介绍了ES6新特性二:Iterator(遍历器)和for-of循环,结合实例形式分析了ES6中Iterator(遍历器)和for-of循环遍历操作的相关实现技巧与注意事项,需要的朋友可以参考下

本文实例讲述了ES6新特性之Iterator(遍历器)和for-of循环。分享给大家供大家参考,具体如下:

1. 遍历数组

for-of工作原理:迭代器有一个next方法,for循环会不断调用这个iterator.next方法来获取下一个值,直到返回值中的 done属性为true的时候结束循环。

① 在ES6之前

var arr = [1,2,3,4,5,6];
arr.name = 'a';
for (var index = 0; index arr.length; index++) {
 console.log(arr[index]);
arr.forEach(function (value) { //ES5 内建的forEach方法 缺陷:无法使用break 中断 ,也不能使用return 语句返回到外层函数
 console.log(value);

结果都是:1,2,3,4,5,6

② 用 for-in :作用于数组的 forfor -in 循环体除了遍历数组元素外,还会遍历自定义属性。比如数组有一个可枚举属性arr.a,循环将额外执行一次

for (var index in arr) { // 千万别这样做
 console.log(arr[index]);

结果:1,2,3,4,5,6,a

for-in 是为普通对象设计的,赋值给index的值不是实际的数字1、2,而是字符串‘1',‘2'

var b = 0;
for (var index in arr) {
 b = b+ index;
 console.log(b)

结果:00,001,0012,00123,00,0012345name

③ 使用 for-of:避开了for-in 的所有缺陷,可以正确响应 break、return 语句

for(var value of arr){
 console.log(value)

结果:1,2,3,4,5,6

2.for-of 循环便利其他集合

① 遍历Set

var words = 'a';
var s = new Set();
s.add("a");
s.add(1);
for(var word of s){
 console.log(word);

结果:a,1

② 遍历Map

var map = new Map();
map.set('a',1);
map.set('b',2);
map.set('c',3);
map.set('d',4);
for(var [key,value] of map){
 console.log(key+':'+value);

结果:a:1,b:2,c:3,d:4

3. Iterator(遍历器)

① 遍历器(Iterator)是一种接口规格,任何对象只要部署这个接口,就可以完成遍历操作。它的作用有两个,一是为各种数据结构,提供一个统一的、简便的接口,二是使得对象的属性能够按某种次序排列。

② 遍历器的原理:遍历器提供了一个指针,指向当前对象的某个属性,使用next方法,就可以将指针移动到下一个属性。next方法返回一个包含value和done两个属性的对象。其中,value属性是当前遍历位置的值,done属性是一个布尔值,表示遍历是否结束。

//模拟遍历器原理
function makeIterator(array){
 var nextIndex = 0;
 return {
 next: function(){
 return nextIndex array.length 
 {value: array[nextIndex++], done: false} :
 {value: undefined, done: true};
var it = makeIterator(['a', 'b']);
console.log(it.next());//{ value: 'a', done: false }
console.log(it.next());//{ value: 'b', done: false }
console.log(it.next());//{ value: undefined, done: true }

③ Iterator接口返回的遍历器,原生具备next方法。

有三类数据结构原生具备Iterator接口:数组、类似数组的对象、Set和Map结构。

var map = new Map();
console.log(map[Symbol.iterator] === map.entries)//true
var arr = new Array();
console.log(arr[Symbol.iterator] === arr.values)//true
var set = new Set();
console.log(set[Symbol.iterator] === set.values)//true

其他数据结构(主要是对象)如果需要Iterator接口,都需要自己部署。

var students = {}
students[Symbol.iterator] = function() {
 let index = 1;
 return {
 next() {
 return {done: index 10, value: index++}
for(var i of students) {
 console.log(i);

希望本文所述对大家ECMAScript程序设计有所帮助。


  • 石家庄市基本建设网站的

    原题目:石家庄市基本建设网站的企业怎样创建一个网站而且能被别人亲睐呢? 如今互联网的建网站之中有平淡无奇的,有方案确立的,有阅读文章舒适的,也是有特点独特的,总得来

  • 也是一大波配套设施跟踪

    模拟题目:也是一大波配套设施设备追踪,2020年,苏州市市产业链产业园区将更绝代! 说起产业链产业园区 你或许最开始想到的是 当今大道、金鸡湖 亦或者是高楼大厦商务大厦林立、

  • 设计方案实例:温州市汤

    原题目:设计方案实例:温州市汤家桥农贸市场销售市场 温州市,通称“温”或“瓯”,我国历史时间文化艺术名都,有着“西南青山绿水甲天地”之美名。 温州市古为瓯地,也称东

  • 新睿云国外网络服务器中

    漫漫冬天,小小雪花纷飞新睿云我国中国香港与美国互联网网络服务器联接点也终于公布啦!目前申请办理申请注册就送20美元,你没听错,申请办理申请注册就送!而且没有伎俩,20美

  • 六本人怎样运维管理一万

    模拟题目:六自己如何运维管理管理方法一万部互联网网络服务器? 前言 在GOPS2017北京市市立在,来源于于去哪里里儿的郑松宽演说《去哪里里儿网应用运维管理管理方法自动式化演化