WeakMap與Map的區別
1、WeakMap
只接受對象作為鍵名(null
除外),不接受其他類型的值作為鍵名。
2、WeakMap
的鍵名所指向的對象,不計入垃圾回收機制。
示例:
const wm = new WeakMap(); const element = document.getElementById('example'); wm.set(element, 'some information'); wm.get(element) // "some information"
上面代碼中,先新建一個 Weakmap 實例。然后,將一個 DOM 節點作為鍵名存入該實例,並將一些附加信息作為鍵值,一起存放在 WeakMap 里面。這時,WeakMap 里面對element
的引用就是弱引用,不會被計入垃圾回收機制。
一旦消除對該節點的引用,它占用的內存就會被垃圾回收機制釋放。Weakmap 保存的這個鍵值對,也會自動消失。
總之,WeakMap
的專用場合就是,它的鍵所對應的對象,可能會在將來消失。WeakMap
結構有助於防止內存泄漏。