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 的学习和使用 – 知乎