和Set的WeakSet類似Map也有WeakMap結(jié)構(gòu),WeakMap結(jié)構(gòu)Map結(jié)構(gòu)大致相同,也是用于生成鍵值對(duì)的集合,方法也存在get和set,形參中可以接受數(shù)組作為構(gòu)造函數(shù)。
由示例中可以發(fā)現(xiàn)一個(gè)問題,WeakMap中的鍵值都是用的Object作為鍵,因?yàn)?/span>WeakMap直接收對(duì)象作為鍵名,下圖中可見,不論用數(shù)字、字符串都不能作為鍵,這也是與Map的區(qū)別之一
區(qū)別二就是WeakMap的鍵名所指的對(duì)象不會(huì)被垃圾回收機(jī)制處理。其意就是當(dāng)外部dom或者對(duì)象消失時(shí),WeakMap的鍵依然可以正常使用。
語法卻別一是沒有遍歷器,所以循環(huán)操作都沒辦法使用,例如keys、values等,也沒有size屬性,因?yàn)槔幚頇C(jī)制的問題所以鍵名也無法清空,取消了clear方法,所以WeakMap只有四個(gè)方法:get、set、has、delete
WeakMap經(jīng)常用在dom節(jié)點(diǎn)中,假設(shè)我們將點(diǎn)擊后更新狀態(tài)放入WeakMap中,對(duì)應(yīng)的餓鍵名就是當(dāng)前dom,一旦這個(gè)dom節(jié)點(diǎn)被刪除,這個(gè)狀態(tài)就會(huì)自動(dòng)消失,不存在內(nèi)存泄漏問題,此外運(yùn)用于監(jiān)聽事件也比較方便,當(dāng)dom消失監(jiān)聽事件也隨之消失