ES6教程之for循环和Map,Set用法分析


Posted in Javascript onApril 10, 2017

本文实例讲述了ES6教程之for循环和Map,Set用法。分享给大家供大家参考,具体如下:

现在大家先想一想,如果要你遍历一个数组的元素,你会选择如何去做呢?一般都会想起for循环:

for (var index = 0; index < myArray.length; index++) {
 console.log(myArray[index]);
}

可惜我得告诉你,这个方法是二十年的人才应该使用的方法,在ES5中已经提出了更为简便的forEach方法,代码如下:

myArray.forEach(function (value) {
 console.log(value);
});

虽然forEach方法简短一点,但是它也有它的缺点,就是不能够break来中途退出循环,也不能通过return来退出循环。

那么不是还有for-in方法吗:

for (var index in myArray) { 
 console.log(myArray[index]);
}

可是for-in方法实际上是为存储key的键值对型对象准备的,而不是为数组准备的,它的下标为字符串“1”,“2”……相信大家都知道“1”+“2”会怎么样吧?

for-of循环

ES6为了不影响以前的代码,为了满足很多人已经养成的习惯,只能推出一种新的循环语法for-of:

for (var value of myArray) {
 console.log(value);
}

对比for-in和for-of:

var a = ["a","b","c","d","e"];
for (var idx in a) {
  console.log( idx ); 
  }// 0 1 2 3 4 
for (var val of a) {
  console.log( val ); 
  }// "a" "b" "c" "d" "e"

for-of不仅仅可以用于数组,还可以用在dom对象上,同样作用于Map和Set对象

下面介绍一下Map和Set对象

Map,Set

JavaScript的默认对象表示方式是{},但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map。

Map是具有极快查找速度的键值对结构。

我们看看Map的使用示例:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

上面的has方法比indexOf速度快。

Set和Map类似,也是存在key的列表,只不过Set中的元素不能够重复。

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

可以看到,再次添加的重复数据会被过滤掉。

那么这两种对象的运用场景有哪些呢?

Map可以用来存储键值对,比如姓名和年龄,而Set可以用来存储不能重复的目标,比如学号列表。

for-of用于对象

好啦,介绍完了两种类型的新对象,让我们看看for-of如何作用于Set对象上的:

var uniqueWords = new Set(words);
for (var word of uniqueWords) {
 console.log(word);
}

遍历Map对象则不同,因为Map是以键值对存储的,所以我们需要分开两个单独的变量来遍历:

for (var [key, value] of phoneBookMap) {
 console.log(key + "'s phone number is: " + value);
}

但是需要注意一点。for-of并不是用来遍历普通的对象的属性的,如果我们一定要这么做,可以使用for-in或者如下方法:

for (var key of Object.keys(someObject)) {
 console.log(key + ": " + someObject[key]);
}

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

Javascript 相关文章推荐
jquery插件制作教程 txtHover
Aug 17 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
Jan 13 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
详细解读AngularJS中的表单验证编程
Jun 19 Javascript
AngularJS的一些基本样式初窥
Jul 27 Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
解决ele ui 表格表头太长问题的实现
Nov 13 Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 #Javascript
js实现适配不同的屏幕大小
Apr 10 #Javascript
You might like
如何开始收听短波广播
2021/03/01 无线电
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
php中的异常和错误浅析
2017/05/03 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
python 获取et和excel的版本号
2009/04/09 Python
python3图片转换二进制存入mysql
2013/12/06 Python
Python Sleep休眠函数使用简单实例
2015/02/02 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
计算机工程学院个人求职信
2013/10/05 职场文书
自我鉴定书面格式
2014/01/13 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
园林技术专业求职信
2014/07/28 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Python 如何安装Selenium
2021/05/06 Python
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python