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