麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

ES6入門教程之Iterator與for...of循環詳解

2019-11-19 16:34:13
字體:
來源:轉載
供稿:網友

本文主要介紹了關于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 ?     {value: array[nextIndex++], done: false} :     {value: undefined, done: true};   }  } } var it = makeIterator(['a', 'b']); it.next().value; //'a' it.next().value; //'b' it.next().done; // true

在上面代碼片段中,定義了一個makeIterator函數,它的作用是返回一個遍歷器對象,用來遍歷參數數組。特別需要注意的是next返回值的構造。

下面,再看看一個遍歷器的示例代碼片段:

 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"); }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 87成人免费看片 | 黄色av免费| 色婷婷久久久亚洲一区二区三区 | 欧美黄色一级片在线观看 | 久久av免费 | 久久55| 成人午夜免费在线视频 | 有色视频在线观看 | 亚洲欧美成aⅴ人在线观看 av免费在线播放 | 19禁国产精品福利视频 | 国产午夜精品一区二区三区在线观看 | 日本看片一区二区三区高清 | 一本视频在线观看 | 国产精品一区二区手机在线观看 | 国产成视频在线观看 | 国产一区二区在线观看视频 | 色就色 综合偷拍区91网 | 在线天堂中文在线资源网 | 午夜精品老牛av一区二区三区 | 网站激情| 成人精品 | 国产午夜精品一区二区三区免费 | va免费视频| 日本在线观看中文字幕 | 天天草天天干天天射 | 日韩精品久久久久久久九岛 | 曰批全过程120分钟免费69 | 午夜视频在线看 | 亚洲精品在线观看网站 | 99国产精品国产免费观看 | 欧美性色生活片免费播放 | 一级性色 | 操操插插 | 久久久久久69 | 色域tv| 日韩视频一区二区在线观看 | 欧美中文字幕一区二区三区亚洲 | 国产精品视频导航 | 国产做爰| 国产男人的天堂 | 视频一区二区三区在线观看 |