夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Jquery_Ajax_Javascript
具有iterable类型的集合可以通过新的for ... of循环来遍历
夜鹰教程网 来源:www.yyjcw.com 日期:2018-9-14 23:28:16
具有iterable类型的集合可以通过新的for ... of循环来遍历

历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。


具有iterable类型的集合可以通过新的for ... of循环来遍历。


for ... of循环是ES6引入的新的语法,请测试你的浏览器是否支持:


'use strict';

var a = [1, 2, 3];

for (var x of a) {

}

alert('你的浏览器支持for ... of');


// 请直接运行测试


 Run

用for ... of循环遍历集合,用法如下:


var a = ['A', 'B', 'C'];

var s = new Set(['A', 'B', 'C']);

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);

for (var x of a) { // 遍历Array

    alert(x);

}

for (var x of s) { // 遍历Set

    alert(x);

}

for (var x of m) { // 遍历Map

    alert(x[0] + '=' + x[1]);

}

你可能会有疑问,for ... of循环和for ... in循环有何区别?


for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。


当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:


var a = ['A', 'B', 'C'];

a.name = 'Hello';

for (var x in a) {

    alert(x); // '0', '1', '2', 'name'

}

for ... in循环将把name包括在内,但Array的length属性却不包括在内。


for ... of循环则完全修复了这些问题,它只循环集合本身的元素:


var a = ['A', 'B', 'C'];

a.name = 'Hello';

for (var x of a) {

    alert(x); // 'A', 'B', 'C'

}

这就是为什么要引入新的for ... of循环。


然而,更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。以Array为例:


var a = ['A', 'B', 'C'];

a.forEach(function (element, index, array) {

    // element: 指向当前元素的值

    // index: 指向当前索引

    // array: 指向Array对象本身

    alert(element);

});

注意,forEach()方法是ES5.1标准引入的,你需要测试浏览器是否支持。


Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:


var s = new Set(['A', 'B', 'C']);

s.forEach(function (element, sameElement, set) {

    alert(element);

});

Map的回调函数参数依次为value、key和map本身:


var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);

m.forEach(function (value, key, map) {

    alert(value);

});

如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。例如,只需要获得Array的element:


var a = ['A', 'B', 'C'];

a.forEach(function (element) {

    alert(element);

});


复制链接 网友评论 收藏本文 关闭此页
上一条: vuejs学习问题汇总  下一条: JavaScript原型对象
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
ajax 清除缓存的两种方法
js日历控件点击日期显示在文本框中…
HTML、JS与FLASH 之间的静态传值方…
主题:ajax请求JSP,为什么GET就是…
javascript 改变iframe(框架)的方…
javascript取鼠标当前坐标
推荐一款网页软键盘 很漂亮的哦
ajax session过期问题的几个解决方…
js文字间隔停顿向上滚动效果
ajax 服务器文本框自动填值
js技术技巧收藏(200例)---1
ajax 数据库中随机读取5条数据动态…
主题:这是否是个捷径?Ajax利用S…
揭开AJAX神秘的面纱(AJAX个人学习…
常用的JS后台导航菜单
  最近更新
js处理键盘事件(keydown event)…
Web前端技术疑点难点汇总
Asp.Net Core2.0允许跨域请求设置…
XMLHttpRequest请求中的跨域问题
原生js节点的操作 创建、添加、移…
VUE2.0组件:父组件子组件之间值的…
JavaScript是世界上最流行的脚本语…
js正则表达式表单验证详解
js正则表达式大全
详细且实用的JS正则表达式大全
EcmaScript5中扩展了叫bind的方法…
attachEvent和addEventListener的…
addEventListener的使用方式
通过构造器的方式来创建函数
为什么需要addEventListener

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3