ES6中promise,new Set(),Array.from,ES7求冪運算符(**)、Array.prototype.includes(),ES8異步函數(Async functions)

 

ES6還沒搞明白,ES7,8新特新出來了,那就瞭解一下。

1,set是一種新數據結構,它可以接收一個數組或者是類數組對象,自動去重其中的重複項目(包括NaN,正常情況下,NaN === NaN 返回的是false,但是在set裏,一樣能夠去重)

此時set返回的是一個對象,我們需要的是返回一個去重的數組,此時Array.from()就派上用場,它的作用,就是可以把類數組對象、可迭代對象轉化爲數組。

let arr=[1,2,2,3,"3","3","hello","hello"]

當然,封裝一個去重的方法也不難,但有好的語法糖還是要嚐嚐!

let json=new Set(arr) //返回去重的類數組對項目

let newArr=Array.from(json) //這樣就獲得去重的數組

2.求冪運算符(**)

基本用法

3**2  //9

Math.pow(3,2)//9

3.Array.prototype.includes()方法接收兩個參數:要搜索的值和搜索的開始索引。當第二個參數被傳入時,該方法會從索引處開始往後搜索(默認索引值爲0)。若搜索值在數組中存在則返回true,否則返回false

 

4.異步函數(Async functions)

Promise的寫法只是回調函數的改進,使用then方法,只是讓異步任務的兩段執行更清楚而已。Promise的最大問題是代碼冗餘,請求任務多時,一堆的then,也使得原來的語義變得很不清楚。此時我們引入了另外一種異步編程的機制:Generator。

Generator 函數是一個普通函數,但是有兩個特徵。一是,function關鍵字與函數名之間有一個星號;二是,函數體內部使用yield表達式,定義不同的內部狀態(yield在英語裏的意思就是“產出”)。

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

var hw = helloWorldGenerator();

上面代碼定義了一個 Generator 函數helloWorldGenerator,它內部有兩個yield表達式(hello和world),即該函數有三個狀態:hello,world 和 return 語句(結束執行)。Generator 函數的調用方法與普通函數一樣,也是在函數名後面加上一對圓括號。不同的是,調用 Generator 函數後,該函數並不執行,返回的也不是函數運行結果,而是一個指向內部狀態的指針對象,必須調用遍歷器對象的next方法,使得指針移向下一個狀態。也就是說,每次調用next方法,內部指針就從函數頭部或上一次停下來的地方開始執行,直到遇到下一個yield表達式(或return語句)爲止。換言之,Generator 函數是分段執行的,yield表達式是暫停執行的標記,而next方法可以恢復執行。上述代碼分步執行如下:

hw.next()
// { value: 'hello', done: false }

hw.next()
// { value: 'world', done: false }

hw.next()
// { value: 'ending', done: true }

hw.next()
// { value: undefined, done: true }

 

 

 

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