ES6遍歷器 生成器 學習整理
阿新 • • 發佈:2018-01-31
weight fine ons class fff size efi 生成器 排列
遍歷器[叠代器](Iterator)
就是這樣一種機制。它是一種接口,為各種不同的數據結構提供統一的訪問機制。任何數據結構只要部署 Iterator 接口,就可以完成遍歷操作(即依次處理該數據結構的所有成員)。
Iterator 的作用有三個:
1、是為各種數據結構,提供一個統一的、簡便的訪問接口;
2、是使得數據結構的成員能夠按某種次序排列;
3、是 ES6 創造了一種新的遍歷命令for...of
循環,Iterator 接口主要供for...of
消費。
示例代碼:
//叠代器示例
function newIterator(arr) { let index = 0; return { next:()=>{ if(index<arr.length){ return {value:arr[index++]} } return {value:‘無數據值‘} } } } const nit=newIterator([‘第一次‘,‘第二次‘,‘第三次‘]); console.log( nit.next().value) console.log( nit.next().value) console.log( nit.next().value) console.log( nit.next().value) console.log( nit.next().value)/** 輸出結果 第一次 第二次 第三次 無數據值 無數據值 **/
給某一實例增加叠代器
Symbol.iterator
屬性本身是一個函數,就是當前數據結構默認的遍歷器生成函數。執行這個函數,就會返回一個遍歷器。至於屬性名Symbol.iterator
,它是一個表達式,返回Symbol
對象的iterator
屬性,這是一個預定義好的、類型為 Symbol 的特殊值,所以要放在方括號內
Symbol 是 ES6 引入了一種新的原始數據類型
Symbol
,表示獨一無二的值
const obj = { [Symbol.iterator] : function () { return{ next: function () { return { value: 1, done: true }; } }; } };
生成器函數 Generator
生成器函數語法可以理解為對叠代器簡化,為了更便捷的使用叠代器而出現的生成器函數。用來達到語法層面的代碼精簡;
示例代碼
function* helloWorldGenerator() { yield ‘hello‘; yield ‘world‘; return ‘ending‘; } var hw = helloWorldGenerator();
/** 執行結果
hw.next() // { value: ‘hello‘, done: false } hw.next() // { value: ‘world‘, done: false } hw.next() // { value: ‘ending‘, done: true } hw.next() // { value: undefined, done: true }
**/
for...of
循環可以自動遍歷 Generator 函數時生成的Iterator
對象,且此時不再需要調用next
方法。
ES6遍歷器 生成器 學習整理