一、ES8(async/await)異步函數(shù)
ES8: async await 注意:async必須要去修飾一個函數(shù),await必須要寫在由async修飾的函數(shù)里面
await一定要去修飾一個返回Promise對象的函數(shù)前面
二、ES6數(shù)組方法
indexOf數(shù)組查找元素
lastIndexOf方法類似indexOf,只是順序相反
forEach遍歷數(shù)組
forEach除了接受一個必須的回調(diào)函數(shù)參數(shù),還可以接受一個可選的上下文參數(shù)(改變回調(diào)函數(shù)里面的this指向)(第2個參數(shù))如果這第2個可選參數(shù)不指定,則使用全局對象代替(在瀏覽器是為window),嚴(yán)格模式下甚至是undefined
map映射(一一對應(yīng))。[].map();基本用法跟forEach方法類似:
filter過濾篩選(callback在這里擔(dān)任的是過濾器的角色,當(dāng)元素符合條件,過濾器就返回true,而filter則會返回所有符合過濾條件的元素)。
reduce(從左到右累加)
對數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。該回調(diào)函數(shù)的返回值為累積結(jié)果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時作為參數(shù)提供
reduceRight(從右到左累加),reduce的作用完全相同,唯一的不同是,reduceRight是從右至左遍歷數(shù)組的元素。
三、ES6--Promise
所謂Promise,就是一個對象,用來傳遞異步操作的消息。
Promise對象有以下兩個特點:
對象的狀態(tài)不受外界影響。Promise對象代表一個異步操作,有三種狀態(tài):Pending(進(jìn)行中)、
Resolved(已完成,又稱Fulfilled)和Rejected(已失敗)。只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種
狀態(tài),任何其他操作都無法改變這個狀態(tài)。
一旦狀態(tài)改變,就不會再變,任何時候都可以得到這個結(jié)果。Promise對象的狀態(tài)改變,只有兩種可能:從
Pending變?yōu)镽esolved和從Pending變?yōu)镽ejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會再變了,會
一直保持這個結(jié)果。就算改變已經(jīng)發(fā)生了,你再對Promise對象添加回調(diào)函數(shù),也會立即得到這個結(jié)果。這
與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監(jiān)聽,是得不到結(jié)果的。
有了Promise對象,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。此外,
Promise對象提供統(tǒng)一的接口,使得控制異步操作更加容易。
Promise也有一些缺點:
首先,無法取消Promise,一旦新建它就會立即執(zhí)行,無法中途取消。
其次,如果不設(shè)置回調(diào)函數(shù),Promise內(nèi)部拋出的錯誤,不會反應(yīng)到外部。
第三,當(dāng)處于Pending狀態(tài)時,無法得知目前進(jìn)展到哪一個階段(剛剛開始還是即將完成)。
resolve函數(shù)的作用是,將Promise對象的狀態(tài)從“未完成”變?yōu)椤俺晒Α保磸腜ending變?yōu)镽esolved),在異步操
作成功時調(diào)用,并將異步操作的結(jié)果,作為參數(shù)傳遞出去;
reject函數(shù)的作用是,將Promise對象的狀態(tài)從“未完成”變?yōu)椤笆 保磸腜ending變?yōu)镽ejected),在異步操作
失敗時調(diào)用,并將異步操作報出的錯誤,作為參數(shù)傳遞出去。