亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ES6新特性二:Iterator(遍歷器)和for-of循環(huán)詳解

 更新時間:2017年04月20日 15:04:32   作者:Dason_yu  
這篇文章主要介紹了ES6新特性二:Iterator(遍歷器)和for-of循環(huán),結合實例形式分析了ES6中Iterator(遍歷器)和for-of循環(huán)遍歷操作的相關實現(xiàn)技巧與注意事項,需要的朋友可以參考下

本文實例講述了ES6新特性之Iterator(遍歷器)和for-of循環(huán)。分享給大家供大家參考,具體如下:

1. 遍歷數(shù)組

for-of工作原理:迭代器有一個next方法,for循環(huán)會不斷調用這個iterator.next方法來獲取下一個值,直到返回值中的 done屬性為true的時候結束循環(huán)。

① 在ES6之前

var arr = [1,2,3,4,5,6];
arr.name = 'a';
for (var index = 0; index < arr.length; index++) {
  console.log(arr[index]);
}
arr.forEach(function (value) { //ES5 內建的forEach方法 缺陷:無法使用break 中斷 ,也不能使用return 語句返回到外層函數(shù)
  console.log(value);
});

結果都是:1,2,3,4,5,6

② 用 for-in :作用于數(shù)組的 forfor -in 循環(huán)體除了遍歷數(shù)組元素外,還會遍歷自定義屬性。比如數(shù)組有一個可枚舉屬性arr.a,循環(huán)將額外執(zhí)行一次

for (var index in arr) { // 千萬別這樣做
 console.log(arr[index]);
}

結果:1,2,3,4,5,6,a

for-in 是為普通對象設計的,賦值給index的值不是實際的數(shù)字1、2,而是字符串‘1',‘2'

var b = 0;
for (var index in arr) {
 b = b+ index;
 console.log(b)
}

結果:00,001,0012,00123,001234,0012345,0012345name

③ 使用 for-of:避開了for-in 的所有缺陷,可以正確響應 break、return 語句

for(var value of arr){
  console.log(value)
}

結果:1,2,3,4,5,6

2.for-of 循環(huán)便利其他集合

① 遍歷Set

var words = 'a';
var s = new Set();
s.add("a");
s.add(1);
for(var word of s){
  console.log(word);
}

結果:a,1

② 遍歷Map

var map = new Map();
map.set('a',1);
map.set('b',2);
map.set('c',3);
map.set('d',4);
for(var [key,value] of map){
  console.log(key+':'+value);
}

結果:a:1,b:2,c:3,d:4

3. Iterator(遍歷器)

① 遍歷器(Iterator)是一種接口規(guī)格,任何對象只要部署這個接口,就可以完成遍歷操作。它的作用有兩個,一是為各種數(shù)據結構,提供一個統(tǒng)一的、簡便的接口,二是使得對象的屬性能夠按某種次序排列。

② 遍歷器的原理:遍歷器提供了一個指針,指向當前對象的某個屬性,使用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']);
console.log(it.next());//{ value: 'a', done: false }
console.log(it.next());//{ value: 'b', done: false }
console.log(it.next());//{ value: undefined, done: true }

③ Iterator接口返回的遍歷器,原生具備next方法。

> 有三類數(shù)據結構原生具備Iterator接口:數(shù)組、類似數(shù)組的對象、Set和Map結構。

var map = new Map();
console.log(map[Symbol.iterator] === map.entries)//true
var arr = new Array();
console.log(arr[Symbol.iterator] === arr.values)//true
var set = new Set();
console.log(set[Symbol.iterator] === set.values)//true

> 其他數(shù)據結構(主要是對象)如果需要Iterator接口,都需要自己部署。

var students = {}
students[Symbol.iterator] = function() {
 let index = 1;
 return {
  next() {
   return {done: index>10, value: index++}
  }
 }
}
for(var i of students) {
 console.log(i);
}//

希望本文所述對大家ECMAScript程序設計有所幫助。

相關文章

  • JS前端開發(fā)模擬虛擬dom轉真實dom詳解

    JS前端開發(fā)模擬虛擬dom轉真實dom詳解

    這篇文章主要為大家介紹了JS前端開發(fā)模擬虛擬dom轉真實dom詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 使用layui日期控件laydate對開始和結束時間進行聯(lián)動控制的方法

    使用layui日期控件laydate對開始和結束時間進行聯(lián)動控制的方法

    今天小編就為大家分享一篇使用layui日期控件laydate對開始和結束時間進行聯(lián)動控制的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 微信小程序實現(xiàn)登陸注冊滑塊驗證

    微信小程序實現(xiàn)登陸注冊滑塊驗證

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)登陸注冊滑塊驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 基于JavaScript實現(xiàn)前端文件的斷點續(xù)傳

    基于JavaScript實現(xiàn)前端文件的斷點續(xù)傳

    這篇文章主要介紹了基于JavaScript實現(xiàn)前端文件的斷點續(xù)傳的相關資料,需要的朋友可以參考下
    2016-10-10
  • JavaScript利用事件循環(huán)實現(xiàn)數(shù)據預加載

    JavaScript利用事件循環(huán)實現(xiàn)數(shù)據預加載

    當我們請求好第一頁數(shù)據后,將請求下一頁放到異步任務隊列里(宏任務或者微任務),等當前同步任務執(zhí)行完成后,立馬請求下一頁數(shù)據,本文給大家介紹了JavaScript如何利用事件循環(huán)實現(xiàn)數(shù)據預加載,需要的朋友可以參考下
    2024-05-05
  • 微信小程序網絡請求實現(xiàn)過程解析

    微信小程序網絡請求實現(xiàn)過程解析

    這篇文章主要介紹了微信小程序網絡請求實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 如何減少瀏覽器的reflow和repaint

    如何減少瀏覽器的reflow和repaint

    本文主要是結合自己的一些項目經驗,給大家提出了幾點減少瀏覽器reflow和repaint的方法和注意事項,希望對大家能有所幫助。
    2015-02-02
  • 第五篇Bootstrap 排版

    第五篇Bootstrap 排版

    使用bootstrap的排版特性可以創(chuàng)建標題,段落,列表及其它內聯(lián)元素。本文重點給大家介紹Bootstrap 排版 知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-06-06
  • JS比較2個日期間隔的示例代碼

    JS比較2個日期間隔的示例代碼

    這篇文章主要介紹了JS比較2個日期間隔的方法,需要的朋友可以參考下
    2014-04-04
  • JavaScript實現(xiàn)div的鼠標拖拽效果

    JavaScript實現(xiàn)div的鼠標拖拽效果

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)div的鼠標拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論