ES6 WeakMap

WeakMap 就是 Map ,weak 表示弱映射,
key(弱弱地拿着)而且必須是對象,
意思是 key 不是正式引用,不會阻止垃圾回收,
但只要 key 存在就不會被垃圾回收機制銷燬。
只有四個方法:
set(key , value)
添加成員並返回WeakMap本身
get(key)
通過 鍵 獲取 值
has(key)
通過 鍵 判斷 成員 是否存在
delete(key)
通過 鍵 移除 成員
 
const obj1 = { name: "tom" };
const wm = new WeakMap();
const wm1 = wm.set(obj1, false); // 添加成員並返回WeakMap本身
console.log(wm, wm1);
console.log(wm.get(obj1)); // 通過 鍵 獲取 值
console.log(wm.has(obj1)); // 通過 鍵 判斷 成員 是否存在
wm.delete(obj1) // 通過 鍵 移除 成員
console.log(wm);

 獲取對象必須要用原來的對象

const obj1 = { name: "tom" };
const obj2 = { name: "tom" };
const wm = new WeakMap();
wm.set(obj1, true);
// obj1、obj2看着一模一樣,但在內存裏還是兩個引用
console.log(wm.get(obj1)); // 能拿到值
console.log(wm.get(obj2)); // 直接undefined

 

垃圾回收機制依賴引用計數,如果一個值的引用次數不爲 0,垃圾回收機制就不會釋放這塊內存。
實際情況是我們經常用完一個值後忘記取消引用,導致內存無法釋放,類似情況一多就引發內存泄漏。
WeakMap、WeakSet 的引用,都不計入垃圾回收機制,所以就不存在這個問題。
WeakMap、WeakSet 適合臨時存放一組對象,以及存放跟對象綁定的信息。
如果引用對象消失,WeakMap、WeakSet 內相關對象也會消失
因成員不固定所有 ES6 規定 WeakMap、WeakSet 不可遍歷。
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章