全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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,001234,0012345,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程序设计有所帮助。


# ES6  # 新特性  # Iterator(遍历器)  # for-of循环  # ES6中非常实用的新特性介绍  # JavaScript ES6的新特性使用新方法定义Class  # JavaScript中的Reflect对象详解(ES6新特性)  # 深入浅出ES6新特性之函数默认参数和箭头函数  # 简单谈谈ES6的六个小特性  # ES6新特性之Symbol类型用法分析  # ES6(ECMAScript 6)新特性之模板字符串用法分析  # ES6新特性之变量和字符串用法示例  # ES6新特性之模块Module用法详解  # ES6新特性之字符串的扩展实例分析  # ES6新特性六:promise对象实例详解  # ES6新特性七:数组的扩充详解  # ES6新特性八:async函数用法实例详解  # ES6新特性之类(Class)和继承(Extends)相关概念与用法分析  # 让微信小程序支持ES6中Promise特性的方法详解  # ES6新特性:使用export和import实现模块化详解  # es6新特性之 class 基本用法解析  # ES6 13个新特性总结  # 遍历  # 数据结构  # 就可以  # 有一个  # 都是  # 是一个  # 也不  # 是一种  # 一是  # 还会  # 开了  # 这样做  # 给大家  # 自定义  # 千万别  # 提供一个  # 内建  # 方法来  # 所述  # 三类 


相关文章: mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  c++ stringstream用法详解_c++字符串与数字转换利器  ,网站推广常用方法?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何用腾讯建站主机快速创建免费网站?  如何在阿里云域名上完成建站全流程?  Python文件管理规范_工程实践说明【指导】  制作表格网站有哪些,线上表格怎么弄?  开封网站制作公司,网络用语开封是什么意思?  建站之星如何实现五合一智能建站与营销推广?  魔方云NAT建站如何实现端口转发?  建站之星2.7模板快速切换与批量管理功能操作指南  建站主机无法访问?如何排查域名与服务器问题  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何在自有机房高效搭建专业网站?  如何快速上传自定义模板至建站之星?  全景视频制作网站有哪些,全景图怎么做成网页?  建站之星免费模板:自助建站系统与智能响应式一键生成  如何解决VPS建站LNMP环境配置常见问题?  seo网站制作优化,网站SEO优化步骤有哪些?  建站之星各版本价格是多少?  如何选择高效响应式自助建站源码系统?  建站之星微信建站一键生成小程序+多端营销系统  如何在Windows环境下新建FTP站点并设置权限?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何快速搭建二级域名独立网站?  利用JavaScript实现拖拽改变元素大小  详解jQuery停止动画——stop()方法的使用  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  c++怎么用jemalloc c++替换默认内存分配器【性能】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何高效完成独享虚拟主机建站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  建站主机如何选?性能与价格怎样平衡?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  建站VPS能否同时实现高效与安全翻墙?  代购小票制作网站有哪些,购物小票的简要说明?  如何高效利用亚马逊云主机搭建企业网站?  如何在腾讯云服务器上快速搭建个人网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  大连网站设计制作招聘信息,大连投诉网站有哪些?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在阿里云虚拟主机上快速搭建个人网站?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  专业网站建设制作报价,网页设计制作要考什么证?  存储型VPS适合搭建中小型网站吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。