weakMap数据结构只接受 一个
变量形式的对象 为key值
,其设计思路是为了可以给对象身上存放一些数据。
let wm = new WeakMap();
// 正确得使用方法
let obj = { a: 1 }
wm.set(obj, '前端伪大叔'); // 前端伪大叔
console.log(wm.get(obj));
// 错误得使用方法
wm.set({a:1},'错误写法演示')
console.log(wm.get({a:1})); // undefined
定义weakMap
// 使用new传入
let ar1 = [1,2,3];
let ar2 = [4,5,6];
let wm1 = new WeakMap([[ar1,'前端伪大叔1'],[ar2,'前端伪大叔2']]);
console.log(wm1.get(ar1)); // 前端伪大叔1
weakMap垃圾回收
weakMap的键名都是弱引用,所以垃圾回收机制不会将它考虑再内。只要不再使用weakMap里的键名对应的引用会自动消失。不需要手动删除。
api
weakMap的api只用4个,set设置数据/get获取数据/has判断传入值是否存在返回boolean/deleta删除数据
<body>
<div></div>
</body>
</html>
<script>
let wm = new WeakMap();
let div = document.querySelector('div');
// 设置
wm.set(div,'前端伪大叔')
// 获取
console.log(wm.get(div)); // 前端伪大叔
// 判断是否存在
console.log(wm.has(div)); // true
// 删除
wm.delete(div)
console.log(wm.has(div)); // false
</script>