重學ES6 WeakMap

含義

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的使用場景關鍵就是它的鍵所對應的對象可能在未來消失的場景。防止內存泄漏。

weakMap方法

只有四個方法

  • get()
  • set()
  • has()
  • delete()
相關文章
相關標籤/搜索