一、Symbol數據類型
ES6中新增加了Symbol數據類型。
原生具有[Symbol.iterator]屬性的數據類型:數組、類數組、map、set、
具有[Symbol.iterator]
屬性的對象,直接調用就可以生成一個Iterator
對象
二、Iterator對象:是一個指針對象,遍歷器對象
方法:next():返回的格式爲{value: ,done: }
使用for..of遍歷: 每次遍歷得到的是value值。
三、Geneteror
function* G(){
yield 200;
yield 300;
return 400;
}
var g=G();
1.Generator不是一個函數,定義generator時,使用function*,使用yield來返回結果。
2.調用Generator之後,它內部的代碼不會立即執行,而是處於一個暫停的狀態。並生成一個generator對象。
3.遇到yield
時,會執行yeild
後面的表達式,並返回執行之後的值,然後再次進入暫停狀態,此時done: false
Generator返回的也是一個iterator對象,因此可以使用next方法、for..of
1.使用next方法時,next中的參數會傳遞給已經執行的yield前面的值。
2.yield*可以在一個Generator中引用另外一個Generator。
四、generator實現異步操作
1.需要thunk函數,只有一個參數,即回調函數
2.通常使用co庫,對異步操作進行包裝,方便簡潔。
3.yield後面必須是thunk函數。
4.generator依然依靠callback
五、async-await:是Generator的語法糖
與Generator相比:
1.將function* 替代爲 async function
2.將yield替代爲await
3. await後面是promise對象。跟其他類型的數據也OK,但是會直接同步執行,而不是異步。