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面试题与Javascript词法作用域说明
Nov 09 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
json数据处理及数据绑定
Jan 25 Javascript
纯js的右下角弹窗实例
Mar 12 Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
Apr 01 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 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
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php表单敏感字符过滤类
2014/12/08 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
深入理解Python中字典的键的使用
2015/08/19 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python自动点赞功能的实现思路
2020/02/26 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Python如何急速下载第三方库详解
2020/11/02 Python
python 如何停止一个死循环的线程
2020/11/24 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
霸王洗发水广告词
2014/03/14 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
教师节宣传方案
2014/05/23 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL