WeakMap 是什么样的数据结构【热度: 431】

关键词:WeakMap应用、WeakMap数据、WeakMap api

基本概念

WeakMap 是一种键值对存储的数据结构,类似于 Map。它的特点是键必须是对象,值可以是任意类型的数据。

WeakMap 内部使用了引用计数的方式来判断键是否存活,当键不再被引用时,垃圾回收机制会自动清除对应的键值对。这意味着如果没有其他地方引用该键,WeakMap 中的键值对会被自动清理,并释放内存。

与 Map 不同的是,WeakMap 的键是弱引用,不会阻止垃圾回收。这意味着在 WeakMap 中,键不能被枚举、迭代或获取键的数量。同时,WeakMap 也没有提供像 Map 中的 size 属性和 clear 方法。

因为键是弱引用,所以 WeakMap 也不能使用普通对象作为键,只能使用具有引用类型的对象作为键。这是为了避免内存泄漏问题,因为如果键是普通对象,即使它没有被其他地方引用,也无法被垃圾回收。

因为 WeakMap 的键是弱引用并且没有提供常用的方法,所以它的使用场景相对有限,主要用于存储对象的私有数据或附加元数据。

有哪些 api

WeakMap 提供了以下的 API:

  • set(key, value): 向 WeakMap 中设置键值对,键必须是对象。
  • get(key): 获取指定键对应的值。
  • has(key): 判断指定键是否存在于 WeakMap 中。
  • delete(key): 删除指定键对应的键值对。
  • 注意:WeakMap 没有提供 size 属性和 clear 方法,也不能直接迭代或枚举键。

需要注意的是,由于 WeakMap 的键是弱引用,只能使用对象作为键,同时也意味着无法通过值来查找对应的键。所以 WeakMap 适用于需要存储对象的私有数据或附加元数据的场景,而不适合用于需要根据值来查找键的情况。