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

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

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

'use strict';
var a = [1, 2, 3];
for (var x of a) {
}
console.log('你的浏览器支持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
console.log(x);
}
for (var x of s) { // 遍历Set
console.log(x);
}
for (var x of m) { // 遍历Map
console.log(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) {
console.log(x); // '0', '1', '2', 'name'
}

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

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

var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
console.log(x); // 'A', 'B', 'C'
}

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

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

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

a.forEach(function (element, index, array) {
// element: 指向当前元素的值
// index: 指向当前索引
// array: 指向Array对象本身
console.log(element + ', index = ' + index);
});

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

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

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

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

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

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

var a = ['A', 'B', 'C'];
a.forEach(function (element) {
console.log(element);
});

最新文章

  1. MySQL学习
  2. MySQL创建一个具有root权限的用户
  3. zookeeper集群某个follower启动失败
  4. Snowflake Snow Snowflakes(哈希表的应用)
  5. Google 推出的 Java 编码规范(转)
  6. sp_executesql的执行计划会被重用(转载)
  7. 码农谷 球从M米高度自由下落第N次落地时反弹的高度
  8. jquery中html()/text()/val()区别
  9. dbutils 执行sql返回的数据类型
  10. new的例子
  11. [转] JavaScript中的字符串操作
  12. (转)css中通常会用到浮动与清除,也是一个必须掌握的知识点,概念性的东西不多说,下面举几个例子,来说明它的用法:1.文字环绕效果 2.多个div并排显示 3.清除浮动(默认显示)
  13. 关于binary log一点总结[转]
  14. 微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作
  15. python监控接口请求
  16. [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
  17. cvpr2018(转发一篇头条)
  18. day12--装饰器
  19. 框架源码系列七:Spring源码学习之BeanDefinition源码学习(BeanDefinition、Annotation 方式配置的BeanDefinition的解析)
  20. Citrix Port(常用端口)

热门文章

  1. [Swift实际操作]九、完整实例-(3)创建和安装开发证书、发布证书及开发证书配置文件、发布证书配置文件
  2. centos7 docker 安装 mysql5.7.24 导入12G的sql
  3. 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
  4. 《条目十八》避免使用vector<bool>
  5. springboot整合activemq加入会签,自动重发机制,持久化
  6. CentOS 中查看软件的版本号
  7. QtLog
  8. A. Right-Left Cipher Round #528 (Div. 2)【字符串】
  9. WPF 一 概述
  10. [转] git忽略已经被提交的文件