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 不可遍历。
 
 
 
posted @ 2022-10-28 14:56  前端-大雄  阅读(109)  评论(0)    收藏  举报