最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ES6入門教程之Iterator與for...of循環(huán)詳解

 更新時(shí)間:2017年05月17日 11:44:29   作者:Dragon_GL  
最近在學(xué)習(xí)ES6,剛剛看到Iterator和for...of循環(huán)這一章,所以想要跟大家略微分享一下,下面這篇文章主要給大家介紹了關(guān)于ES6入門學(xué)習(xí)中Iterator與for...of循環(huán)的相關(guān)資料,不足之處還望大家多多指正,需要的朋友們可以參考學(xué)習(xí)。

本文主要介紹了關(guān)于ES6中Iterator與for...of循環(huán)的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),需要的朋友們下面來一起看看詳細(xì)的介紹:

一、Iterator(遍歷器)

遍歷器(Iterator)是一種協(xié)議,任何對象只要部署了這個(gè)協(xié)議,就可以完成遍歷操作。在ES6中遍歷操作特質(zhì)for….of循環(huán)。

它的作用主要有兩個(gè):

  • 為遍歷對象的屬性提供統(tǒng)一的接口。
  • 使對象的屬性能夠按次序排列。

ES6的遍歷器協(xié)議規(guī)定,部署了next方法的對象,就具備了遍歷器功能。next方法必須返回一個(gè)包含value和done兩個(gè)屬性的對象。value屬性是當(dāng)前遍歷的位置的值,而done屬性是一個(gè)布爾值,用來表示遍歷是否結(jié)束。

 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

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

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

 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 循環(huán)

在ES6中,一個(gè)對象只要部署了next方法,就被視為是具有了iterator接口,就可以用for…of循環(huán)遍歷它的值。

 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默認(rèn)從0開始循環(huán)。

數(shù)組原生具備iterator接口

 const arr = [1, 5, 3, 9];
 for (let v of arr) {
  console.log( v );
 }
 //1
 //5
 //3
 //9

相比較,Js原有的for…in循環(huán),只能獲得對象的鍵名,不能直接獲取鍵值。ES6提供了for…of循環(huán),允許遍歷獲取鍵值。

 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循環(huán)讀取鍵名,而for…of循環(huán)讀取鍵值。

對于Set和Map結(jié)構(gòu)的數(shù)據(jù),可以直接使用for…of循環(huán)。

 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結(jié)構(gòu)和Map結(jié)構(gòu),后者是同是遍歷鍵名和鍵值。

對于普通的對象,for...of結(jié)構(gòu)不能直接使用,否則則會(huì)報(bào)錯(cuò)。必須項(xiàng)部署iterator接口才能使用。但是,在這種情況下,for...in循環(huán)依然可以遍歷鍵名。

 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

最后,總結(jié)一下。for...of循環(huán)可以使用的范圍包括數(shù)組、類似數(shù)組的而對象(比如argument對象、DOM NodeList對象)、Set和Map結(jié)構(gòu)、后文的Generator對象,以及字符串。下面是使用for...of循環(huán)遍歷字符串和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");
 }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • js+數(shù)組實(shí)現(xiàn)網(wǎng)頁上顯示時(shí)間/星期幾的實(shí)用方法

    js+數(shù)組實(shí)現(xiàn)網(wǎng)頁上顯示時(shí)間/星期幾的實(shí)用方法

    在網(wǎng)頁上顯示時(shí)間(年月日/時(shí)分秒),很多新手朋友都想實(shí)現(xiàn)這樣的功能,本文整理了一些實(shí)用技巧,殺出來與大家分享,感興趣的朋友可以了解下
    2013-01-01
  • 深入淺析knockout源碼分析之訂閱

    深入淺析knockout源碼分析之訂閱

    Knockout是一款很優(yōu)秀的JavaScript庫,它可以幫助你僅使用一個(gè)清晰整潔的底層數(shù)據(jù)模型(data model)即可創(chuàng)建一個(gè)富文本且具有良好的顯示和編輯功能的用戶界面。這篇文章主要介紹了knockout源碼分析之訂閱的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼

    通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼

    通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼,需要的朋友可以參考下
    2012-05-05
  • javascript 原型與原型鏈的理解及實(shí)例分析

    javascript 原型與原型鏈的理解及實(shí)例分析

    這篇文章主要介紹了javascript 原型與原型鏈的理解,結(jié)合實(shí)例形式分析了javascript 原型與原型鏈的原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Javascript實(shí)現(xiàn)的CSS代碼高亮顯示

    Javascript實(shí)現(xiàn)的CSS代碼高亮顯示

    到網(wǎng)上一位別出心裁的高手使用字符串而不是正則表達(dá)式實(shí)現(xiàn)了Javascript代碼高亮顯示,自己受益匪淺,于是就構(gòu)思了CSS代碼的高亮顯示。
    2009-11-11
  • 實(shí)例學(xué)習(xí)JavaScript讀取和寫入cookie

    實(shí)例學(xué)習(xí)JavaScript讀取和寫入cookie

    本篇內(nèi)容主要給大家通過實(shí)例講述了JavaScript讀取和寫入cookie的相關(guān)知識點(diǎn),有這方面需要的朋友參考下吧。
    2018-01-01
  • Javascript es7中比較實(shí)用的兩個(gè)方法示例

    Javascript es7中比較實(shí)用的兩個(gè)方法示例

    這篇文章主要給大家分享了關(guān)于Javascript es7中比較實(shí)用的兩個(gè)方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • canvas紅包照片實(shí)例分享

    canvas紅包照片實(shí)例分享

    本文主要分享了canvas紅包照片的實(shí)例代碼,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 原生js寫的放大鏡效果

    原生js寫的放大鏡效果

    在淘寶上購物時(shí),總會(huì)看到類似放大鏡的效果。以下為原生js寫的一個(gè)放大鏡效果,其中肯定有很多不足,請大牛們指正,謝啦
    2012-08-08
  • canvas實(shí)現(xiàn)動(dòng)態(tài)小球重疊效果

    canvas實(shí)現(xiàn)動(dòng)態(tài)小球重疊效果

    在javascript運(yùn)動(dòng)系列中,詳細(xì)介紹了各種運(yùn)動(dòng),其中就包括碰壁運(yùn)動(dòng)。但是,如果用canvas去實(shí)現(xiàn),卻是另一種思路。本文將詳細(xì)介紹canvas動(dòng)態(tài)小球重疊效果。下面跟著小編一起來看下吧
    2017-02-02

最新評論

孟村| 中方县| 蒙山县| 盐边县| 张家口市| 安龙县| 桐城市| 资兴市| 肇源县| 泰兴市| 呼玛县| 富顺县| 炉霍县| 弥勒县| 桐庐县| 香格里拉县| 桑日县| 南京市| 博爱县| 射洪县| 准格尔旗| 夹江县| 西乌珠穆沁旗| 兖州市| 大城县| 广水市| 伊春市| 巴彦县| 神池县| 定陶县| 中牟县| 嵊州市| 元谋县| 鲁甸县| 晋宁县| 保定市| 青河县| 贡山| 武城县| 柘荣县| 黑山县|