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 @   前端-大雄  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示