weakMap数据结构只接受 一个变量形式的对象 为key值 ,其设计思路是为了可以给对象身上存放一些数据。

  1. let wm = new WeakMap();
  2. // 正确得使用方法
  3. let obj = { a: 1 }
  4. wm.set(obj, '前端伪大叔'); // 前端伪大叔
  5. console.log(wm.get(obj));
  6. // 错误得使用方法
  7. wm.set({a:1},'错误写法演示')
  8. console.log(wm.get({a:1})); // undefined

定义weakMap

  1. // 使用new传入
  2. let ar1 = [1,2,3];
  3. let ar2 = [4,5,6];
  4. let wm1 = new WeakMap([[ar1,'前端伪大叔1'],[ar2,'前端伪大叔2']]);
  5. console.log(wm1.get(ar1)); // 前端伪大叔1

weakMap垃圾回收

weakMap的键名都是弱引用,所以垃圾回收机制不会将它考虑再内。只要不再使用weakMap里的键名对应的引用会自动消失。不需要手动删除。

api

weakMap的api只用4个,set设置数据/get获取数据/has判断传入值是否存在返回boolean/deleta删除数据

  1. <body>
  2. <div></div>
  3. </body>
  4. </html>
  5. <script>
  6. let wm = new WeakMap();
  7. let div = document.querySelector('div');
  8. // 设置
  9. wm.set(div,'前端伪大叔')
  10. // 获取
  11. console.log(wm.get(div)); // 前端伪大叔
  12. // 判断是否存在
  13. console.log(wm.has(div)); // true
  14. // 删除
  15. wm.delete(div)
  16. console.log(wm.has(div)); // false
  17. </script>