es6-迭代器生成器

簡化循環

  • 生成器
     // 生成器函數名稱前帶個*
     // 函數表達式let createIterator = function *(items){}
     function *createIterator() {
         yield 1; //yield關鍵字不能往深度嵌套只能存在於構造器中 
         yield 2;
         yield 3;
     } // 這邊同樣可以以參數循環方式去構造
     // 生成器能像正規函數那樣被調用,但會返回一個迭代器
     let iterator = createIterator();
     // next遍歷
     console.log(iterator.next().value); // 1
     console.log(iterator.next().value); // 2
     console.log(iterator.next().value); // 3
    
  • 訪問對象默認迭代器
     let values = [1, 2, 3];
     let iterator = values[Symbol.iterator]();
     // 然後就可以通過next方法來訪問每一項
    
  • for-of循環
    這邊主要是記錄一下三種集合類型的用法:數組、Set、Map對象。
    entries() :返回一個包含鍵值對的迭代器;
    values() :返回一個包含集合中的值的迭代器;
    keys() :返回一個包含集合中的鍵的迭代器。
    數組對象鍵值爲0起始,set對象鍵值就是value本身
    如果我們不聲明迭代器會採取默認迭代器輸出。
     let values = [1, 2, 3];
     for (let num of values) {
         console.log(num);
     }
     
     // 迭代器在for of中用法
     for (let each of values.entries()){
         console.log(each);
     }
    
    for of循環Map對象可以採用解構,同樣可以實現比較方便的
     let data = new Map();
     data.set("title", "Understanding ES6");
     data.set("format", "ebook");
     // 與使用 data.entries() 相同
     for (let [key, value] of data) {
         console.log(key + "=" + value);
     }
    
  • 字符串迭代器
    for of循環去遍歷字符串每一位,包括空格
  • NodeList 的迭代器
    NodeList爲js獲取DOM元素的集合,在es6中同樣也可以使用for of去循環
     let divs = document.getElementsByTagName('div');
     for (div of divs){
         console.log(div.id);
     }
    

迭代器還有非常多的拓展功能繼續深入瞭解可以看一下深入理解es6這本書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章