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 相关文章推荐
情人节之礼 js项链效果
Feb 13 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
Oct 17 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
AngularJS初始化静态模板详解
Jan 14 Javascript
浅析JS异步加载进度条
May 05 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
Feb 12 Javascript
关于element的表单组件整理笔记
Feb 05 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
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
教你php如何实现验证码
2016/01/20 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
Javascript面向对象编程
2012/03/18 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
微信小程序使用Socket的实例
2017/09/19 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
python修改操作系统时间的方法
2015/05/18 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
python中关于for循环的碎碎念
2017/06/30 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python global全局变量函数详解
2018/09/18 Python
总结python中pass的作用
2019/02/27 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
Python 私有化操作实例分析
2019/11/21 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
研究生毕业鉴定
2014/01/29 职场文书
新书吧创业计划书
2014/01/31 职场文书
违纪检讨书2000字
2014/02/08 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
促销活动总结报告
2014/04/26 职场文书
实习评语大全
2014/04/26 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书