WeakMap和Map區別有一下兩點javascript
第一是:WeakMap只接受對象做爲鍵名(null除外),不接受其餘類型做爲鍵值java
第二是:WeakMap鍵名所指向的對象不計入垃圾回收機制數組
WeakMap的設計目的在於:有的時候,咱們想在某個對象上存放一些數據,可是這會造成對這個對象的引用。ui
example:spa
const e1 = document.getElementById('foo')
const e2 = document.getElementById('bar')
const arr = [
[e1,'foo元素'],
[e2,'bar元素']
]
複製代碼
咱們經過數組,對e1和e2兩個對象添加了說明,就造成了對e1和e2的引用。設計
一旦不須要這兩個對象了,咱們必須手動清除這個引用,不然垃圾回收機制不會e1和e2佔用的內存。code
arr[0] = null
arr[1] = null
複製代碼
可是這樣寫很麻煩,也容易忘記,形成內存泄漏
。orm
WeakMap就是爲了解決這個問題誕生的。它的鍵名所引用的對象都是若引用,垃圾回收機制不將該引用考慮在內。對象
基本上,若是要向對象添加數據,又不想幹擾垃圾回收機制,就能夠使用WeakMap。ip
const wm = new WeakMap()
const e1 = document.getElementById('foo')
wm.set(el,'some information')
wm.get(el)
複製代碼
weakMap的使用場景關鍵就是它的鍵所對應的對象可能在未來消失的場景。防止內存泄漏。
只有四個方法