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怎么解析Json字符串(Json格式/Json对象)
Aug 09 Javascript
今天是星期几的4种JS代码写法
Sep 17 Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
JS通过调用微信API实现微信支付功能的方法示例
Jun 29 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
vue实现压缩图片预览并上传功能(promise封装)
Jan 10 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 14 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 Javascript
Vue仿Bibibili首页的问题
Jan 21 Vue.js
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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
PHP自动更新新闻DIY
2006/10/09 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
关于Laravel-admin的基础用法总结和自定义model详解
2019/10/08 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python字符串的方法与操作大全
2018/01/30 Python
python @property的用法及含义全面解析
2018/02/01 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
学习保证书100字
2015/02/26 职场文书
中秋节寄语2015
2015/03/24 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL