首頁 > web前端 > js教程 > 主體

JavaScript ES6語法中iterator與for...of迴圈的範例詳解

黄舟
發布: 2017-10-25 09:33:25
原創
1526 人瀏覽過

Iterator遍歷器

遍歷器(Iterator)就是這樣一種機制。它是一種接口,為各種不同的資料結構提供統一的存取機制。任何資料結構只要部署Iterator接口,就可以完成遍歷操作(即依序處理該資料結構的所有成員)。

作用:

  • 為各種資料結構,提供一個統一的、簡單的存取介面

  • 使得資料結構的成員能夠依某種次序排列

  • ES6創造了一種新的遍歷指令for...of循環,Iterator介面主要供for ...of消費

Iterator的遍歷過程:

(1)建立一個指針對象,指向目前資料結構的起始位置。也就是說,遍歷器物件本質上,就是一個指針對象。

(2)第一次呼叫指標針對象的next方法,可以將指標指向資料結構的第一個成員。

(3)第二次呼叫指標針對象的next方法,指標就指向資料結構的第二個成員。

(4)不斷呼叫指向象的next方法,直到它指向資料結構的結束位置。

在ES6中,有三類資料結構原生具備Iterator介面:陣列、某些類似陣列的物件、Set和Map結構。

可以覆寫原生的Symbol.iterator方法,達到修改遍歷器行為的目的。

for...of

for...of迴圈可以使用的範圍包括陣列、Set和Map結構、某些類似陣列的物件(例如arguments物件、DOM NodeList物件) 、後文的Generator對象,以及字串。


{
  let arr=['hello','world'];
  let map=arr[Symbol.iterator]();  //done表示是否还有下一步了,false有 true 没有
  console.log(map.next()); //{value: "hello", done: false}
  console.log(map.next()); //{value: "world", done: false}
  console.log(map.next()); //{value: undefined, done: true}}

{
  let obj={
    start:[1,3,2],
    end:[7,9,8],    //声明    
    [Symbol.iterator](){      //函数体
      let self=this;
      let index=0; //当前遍历索引
      let arr=self.start.concat(self.end); //合并数组
      let len=arr.length;//记住数组长度
      return {        //iterator部署的时候一定要有next这个方法        
      next(){          //遍历过程
          if(index<len){            
          return {
              value:arr[index++],
              done:false
            }
          }else{            
          return {
              value:arr[index++],
              done:true //遍历结束            
              }
          }
        }
      }
    }
  }  //验证接口是否部署成功
  for(let key of obj){
    console.log(&#39;key1&#39;,key); //1 3 2 7 9 8  }
}

{
  let arr=[&#39;hello&#39;,&#39;world&#39;];  for(let value of arr){
    console.log(&#39;value&#39;,value); //hello ,world  }
}
登入後複製

以上是JavaScript ES6語法中iterator與for...of迴圈的範例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板