WeakMap的特点在于它能够实现弱引用关联,并且只能存储对象作为键名。WeakMap中的键名必须是对象,则值可以是任意类型的数据。WeakMap的键名是弱引用,当键名所指向的对象在其他地方被清除时,WeakMap中对应的键值对也会自动被清除。
WeakMap的特点
- 弱引用关联:WeakMap中键名是弱引用的,当键名所指向的对象在其他地方没有被引用时,对应的键值对会自动被清除。
- 只能使用对象作为键名:WeakMap只能接受对象作为键名,而且不能使用原始类型(比如字符串,数字,null等)作为键名。
- 无法迭代:WeakMap没有提供直接的方法来迭代键值对,没有
keys()、values()和entries(),因为WeakMap的键值对迭代顺序不确定,无法保证按照插入顺序或其他方式进行迭代。 - 无法获取大小:WeakMap没有提供像Map的size属性,无法获取到键值对数量,导致WeakMap无法直接获取容量大小。
- 应用于临时存储和私有属性:WeakMap非常适用于需要临时存储数据或用于私有属性的场景。由于键值对在不被其他引用的情况下会被自动清除,使用WeakMap可以避免内存泄露和不必要的资源占用。
WeakMap常用的方法
set(key,value):向WeakMap中设置键值对。get(key):获取指定键的值。has(key):检查WeakMap中是否存在指定键。delete(key):删除指定键及其对应的值。
var wm = new WeakMap();
function Foo() {
this.arr = new Array(5 * 1024 * 1024);
}
var f = new Foo();
wm.set(f, "data");
f = null;