强引用Map、Set和弱引用WeakMap、WeakSet及WeakRef

70 阅读1分钟
1. Map、Set和WeakMap、WeakSet的区别
  • 相对于Map、Set的key可以是所有的数据类型,WeakMap、WeakSet的key只能是引用数据类型
  • 用WeakMap、WeakSet定义的对象,使用set()方法时不会导致引用计数+1.可以有效避免一些内存泄漏
  • 相较于Map、Set,WeakMap、WeakSet的key没有了相关遍历方法
  • 由于WeakSet没有get方法,所以不能单个获取值,需要先转成数组
2. WeakRef
  • GC垃圾回收一旦执行,获取的值deref就是undefined
function Test() { }
let arr = new Array(200000).fill(null).map(e => new Test());

let ref = new WeakRef(arr); // 引用计数不+1
// GC垃圾回收一旦执行,获取的值deref就是undefined
console.log(ref.deref().length);
arr = null;