本文主要介绍了关于ES6中Iterator与for...of循环的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看详细的介绍:
一、Iterator(遍历器)
遍历器(Iterator)是一种协议,任何对象只要部署了这个协议,就可以完成遍历操作。在ES6中遍历操作特质for….of循环。
它的作用主要有两个:
- 为遍历对象的属性提供统一的接口。
- 使对象的属性能够按次序排列。
ES6的遍历器协议规定,部署了next方法的对象,就具备了遍历器功能。next方法必须返回一个包含value和done两个属性的对象。value属性是当前遍历的位置的值,而done属性是一个布尔值,用来表示遍历是否结束。
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length "htmlcode">
function idMaker() {
var index = 0;
return {
next: function() {
return {value: index++, done: false};
}
}
}
var it = idMaker();
it.next().value; //'0'
it.next().value; //'1'
it.next().value; //'2'
二、for…of 循环
在ES6中,一个对象只要部署了next方法,就被视为是具有了iterator接口,就可以用for…of循环遍历它的值。
function idMaker() {
var index = 0;
return {
next: function() {
return {value: index++, done: false};
}
}
}
for (var n of it) {
if (n > 5) {
break;
console.log( n );
}
}
//0
//1
//2
//3
//4
//5
上面的代码说明,for….of默认从0开始循环。
数组原生具备iterator接口
const arr = [1, 5, 3, 9];
for (let v of arr) {
console.log( v );
}
//1
//5
//3
//9
相比较,Js原有的for…in循环,只能获得对象的键名,不能直接获取键值。ES6提供了for…of循环,允许遍历获取键值。
var arr = ['a', 'b', 'c', 'd'];
for (a in arr) {
console.log( a );
}
//0
//1
//2
//3
for (a of arr) {
console.log( a );
}
//0
//1
//2
//3
上面的代码片段表明,for…in循环读取键名,而for…of循环读取键值。
对于Set和Map结构的数据,可以直接使用for…of循环。
var name = ['S', 'D', 'J', 'Z', 'G', 'G', 'G'];
for ( var e of name) {
console.log( e );
}
//S
//D
//J
//Z
//G
var es6 = new Map();
es6.set('edition', 6);
es6.set('committee', 'TC39');
es6.set('standard', 'ECMA-262');
for(var [name, value] of es6) {
console.log(name + ": " + value);
}
// edition: 6
// commttee: TC39
// standard: ECMA-262
在上面的代码片段中,演示了如何遍历Set结构和Map结构,后者是同是遍历键名和键值。
对于普通的对象,for...of结构不能直接使用,否则则会报错。必须项部署iterator接口才能使用。但是,在这种情况下,for...in循环依然可以遍历键名。
var es6 = {
name: "G.Dragon",
year: 22,
love: "coding"
};
for (e in es6) {
console.log( e );
}
//name
//year
//love
for( e of es6) {
console.log( e );
}
// TypeError: es6 is not iterable
最后,总结一下。for...of循环可以使用的范围包括数组、类似数组的而对象(比如argument对象、DOM NodeList对象)、Set和Map结构、后文的Generator对象,以及字符串。下面是使用for...of循环遍历字符串和DOM NodeList对象的例子。
// 字符串例子
let str = "hello";
for (let s of str) {
console.log( s );
}
//h
//e
//l
//l
//o
// DOM NodeList对象的例子
let paras = document.getSelectorAll("p");
for (let p of paras) {
p.classList.add("test");
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
《魔兽世界》大逃杀!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]