本文主要介绍了关于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"); }总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 关淑怡.2009-ERA【星娱乐】【WAV+CUE】
- 林忆莲《关于她的爱情故事》2022新世纪MQA 24K金碟限量版[WAV+CUE]
- 张雨生1993《一天到晚游泳的鱼》台湾G字首版[WAV+CUE][1G]
- 群星《试音五大女声》[WAV+CUE][1G]
- 魔兽世界wlk武器战一键输出宏是什么 wlk武器战一键输出宏介绍
- 魔兽世界wlk狂暴战一键输出宏是什么 wlk狂暴战一键输出宏介绍
- 魔兽世界wlk恶魔术士一键输出宏是什么 wlk恶魔术士一键输出宏介绍
- 医学爱好者狂喜:UP主把医学史做成了格斗游戏!
- PS5 Pro评分解禁!准备升级入手吗?
- 我们盘点了近期火热的国产单机游戏!《琉隐神渡》等 你期待哪款?
- 2019年第12届广州影音展双碟纪念版ADMS2CD[MP3/WAV]
- 黄安《救姻缘》台首版[WAV+CUE]
- 模拟之声慢刻CD《柏林之声4》[正版CD低速原抓WAV+CUE]
- 李宗盛 《李宗盛经典金曲》[WAV+CUE][1G]
- 周华健《粤语精选》[WAV+CUE][1G]