簡化循環
- 生成器
// 生成器函數名稱前帶個* // 函數表達式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本身
如果我們不聲明迭代器會採取默認迭代器輸出。
for of循環Map對象可以採用解構,同樣可以實現比較方便的let values = [1, 2, 3]; for (let num of values) { console.log(num); } // 迭代器在for of中用法 for (let each of values.entries()){ console.log(each); }
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這本書