JavaScript之iterable_动力节点Java学院整理


Posted in Javascript onJune 29, 2017

遍历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');

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标准引入的,你需要测试浏览器是否支持。

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

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
  alert(element);
});

Map的回调函数参数依次为valuekeymap本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
  alert(value);
});

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

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
  alert(element);
});
Javascript 相关文章推荐
JavaScript入门教程(7) History历史对象
Jan 31 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
javascript去除空格方法小结
May 21 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
js解决movebox移动问题
Mar 29 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
Sep 05 jQuery
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 #Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 #Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 #Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 #jQuery
You might like
PHP 批量更新网页内容实现代码
2010/01/05 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
ExpressJS入门实例
2015/01/14 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
Python实现获取某天是某个月中的第几周
2015/02/11 Python
python传递参数方式小结
2015/04/17 Python
Python打印斐波拉契数列实例
2015/07/07 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
python常见排序算法基础教程
2017/04/13 Python
python实现自主查询实时天气
2018/06/22 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
护理专业推荐信
2013/11/07 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
《观舞记》教学反思
2014/04/16 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书