1. 程式人生 > >ES6遍歷器 生成器 學習整理

ES6遍歷器 生成器 學習整理

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遍歷器 生成器 學習整理