本文实例讲述了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程序设计有所帮助。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]