乐趣区

WeakMap-WeakSet

WeakMap WeakSet

特性:

  • WeakMap 对 key 的引用和 WeakSet 的成员 是弱引用
  • WeakMap 对 key 的引用和 WeakSet 的成员 只能是对象
  • 无法遍历

优点:

  • 不易造成内存泄漏

弱引用

引用了对象,但是不影响它的垃圾回收

不会因为该(弱)引用而改变原本的垃圾回收机制,在(弱)引用前应该进垃圾场的,(弱)引用后还是得进垃圾场,不受到(弱)引用的任何影响。

var obj = {};
var wm = new WeakMap();
// 弱引用
wm.set(obj, 1);
console.log(wm.get(obj));    // 1

// obj 为 null,将会给垃圾回收机制回收。obj = null;
console.log(wm.get(obj));    // undefined

Set Map WeakSet WeakMap 区别

Set

  • 成员唯一、无序且不重复
  • [value, value],键值与键名是一致的(或者说只有键值,没有键名)
  • 可以遍历,方法有:add、delete、has

WeakSet

  • 成员都是对象
  • 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏
  • 不能遍历,方法有 add、delete、has

Map

  • 本质上是键值对的集合,类似集合
  • 可以遍历,方法很多可以跟各种数据格式转换

WeakMap

  • 只接受对象作为键名(null 除外),不接受其他类型的值作为键名
  • 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
  • 不能遍历,方法有 get、set、has、delete

具体用法与更详细解释

ES2015 WeakMap 的学习和使用 – 知乎

退出移动版