JavaScript - WeakMap 对象



JavaScript 中的 WeakMap 对象是键值对的集合,其中键是弱引用的。WeakMap 的键必须是对象或未注册的符号,而值可以是任何任意 JavaScript 类型。

WeakMap 类似于 JavaScript Map。WeakMap 和 Map 数据结构之间的主要区别在于 WeakMap 数据结构仅使用对象作为键,而 Map 可以使用其他数据类型作为键。

如果除了对象之外,您使用其他数据类型的作为 WeakMap 的键,则会引发类型错误。

语法

您可以按照以下语法在 JavaScript 中使用 WeakMap:

const weak_map = new WeakMap();

在以上语法中,我们使用 'new' 关键字和 WeakMap() 函数来创建一个新的 WeakMap 实例。

WeakMap 提供了设置、获取和删除 WeakMap 中键值对的方法。这里,我们列出了 WeakMap 的属性和方法。

WeakMap 属性

以下是 WeakMap 属性及其描述的列表:

序号 名称和描述
1

constructor

获取 WeakMap 的构造函数。

WeakMap 方法

以下是与 WeakMap 对象关联的方法及其描述的列表:

序号 名称和描述
1

delete()

从 WeakMap 中删除单个键值对。

2

get()

获取与特定对象相关的值。

3

has()

检查特定对象是否存在于 WeakMap 中作为键。

4

set()

在 WeakMap 中插入键值对。

WeakMap 构造函数()

以下是 JavaScript 中的 WeakMap 构造函数:

序号 名称和描述
1

WeakMap()

创建 WeakMap 对象。

示例

示例:将键值对插入 WeakMap

在下面的示例中,我们使用构造函数定义了 WeakMap。之后,我们使用 set() 方法将 laptop 对象设置为键,并将它的价格设置为值。

最后,我们使用 get() 方法获取与“laptop”键相关的值。

<html>
<body>
   <p id = "output">The laptop price is: </p>
   <script>
      const wm = new WeakMap();
      const laptop = {
         brand: "HP",
         model: "Pavilion",
      }
      wm.set(laptop, 100000);
      document.getElementById("output").innerHTML += wm.get(laptop);
   </script>
</body>
</html>

输出

The laptop price is: 100000

如果我们执行程序,它将返回与“laptop”键相关的值,即“10000”。

示例:从 WeakMap 中删除键值对

在下面的示例中,我们使用 set() 方法在 WeakMap 中插入了键值对。

之后,我们使用 delete() 方法从 WeakMap 中删除了键值对。删除键值对后,当您访问它时,WeakMap 将返回 undefined,如输出所示。

注意 - WeakMap 在 JavaScript 中不可迭代。

<html>
<body>
   <div id = "output1">The laptop price is:  </div>
   <div id = "output2">The laptop price after deletion is:  </div>
   <script>
      const wm = new WeakMap();
      const laptop = {
         brand: "HP",
         model: "Pavilion",
      }
      wm.set(laptop, 100000);
      document.getElementById("output1").innerHTML += wm.get(laptop);

      wm.delete(laptop);
      document.getElementById("output2").innerHTML += wm.get(laptop);
   </script>
</body>
</html>

输出

The laptop price is: 100000
The laptop price after deletion is: undefined

它返回“undefined”,因为键值对已从 WeakMap 中删除。

WeakMap 在 JavaScript 中不可迭代
广告