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 不可遍歷。