WeakMap

68 阅读2分钟

掘金学习

掘金学习1

  • WeakMap的特点在于它能够实现弱引用关联,并且只能存储对象作为键名。
  • WeakMap中的键名必须是对象,则值可以是任意类型的数据。
  • WeakMap的键名是弱引用,当键名所指向的对象在其他地方被清除时,WeakMap中对应的键值对也会自动被清除。

WeakMap的特点

  1. 弱引用关联:WeakMap中键名是弱引用的,当键名所指向的对象在其他地方没有被引用时,对应的键值对会自动被清除。
  2. 只能使用对象作为键名:WeakMap只能接受对象作为键名,而且不能使用原始类型(比如字符串,数字,null等)作为键名。
  3. 无法迭代:WeakMap没有提供直接的方法来迭代键值对,没有keys()values()entries(),因为WeakMap的键值对迭代顺序不确定,无法保证按照插入顺序或其他方式进行迭代。
  4. 无法获取大小:WeakMap没有提供像Map的size属性,无法获取到键值对数量,导致WeakMap无法直接获取容量大小。
  5. 应用于临时存储和私有属性:WeakMap非常适用于需要临时存储数据或用于私有属性的场景。由于键值对在不被其他引用的情况下会被自动清除,使用WeakMap可以避免内存泄露和不必要的资源占用。

WeakMap常用的方法

  1. set(key,value):向WeakMap中设置键值对。
  2. get(key):获取指定键的值。
  3. has(key):检查WeakMap中是否存在指定键。
  4. 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;