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 }