Javascript 简明教程

JavaScript - The WeakMap Object

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

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

如果您将其他数据类型的值用作 WeakMap 的键(对象除外),则会引发类型错误。

Syntax

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

const weak_map = new WeakMap();

在以上语法中,我们使用带有 WeakMap() 函数的“new”关键字创建 WeakMap 的新实例。

WeakMap 提供了从 WeakMap 中设置、获取和删除 key-value 对的方法。在此,我们列出了 WeakMap 的属性和方法。

WeakMap Properties

以下是对 WeakMap 属性及其说明的列表:

Sr.No.

Name & Description

1

constructor 获取 WeakMap 的构造函数。

WeakMap Methods

以下是对 WeakMap 对象相关联的方法及其说明的列表:

Sr.No.

Name & Description

1

delete() 从 WeakMap 中删除单个键值对。

2

get() 获取与特定对象相关的键值。

3

has() 检查某个特定对象是否存在于 WeakMap 中。

4

set() 向 WeakMap 中插入键值对。

WeakMap Constructor()

以下是在 JavaScript 中使用 WeakMap 构造函数 -

Sr.No.

Name & Description

1

WeakMap() 创建 WeakMap 对象。

Examples

Example: Inserting key-value pair to the 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"。

Example: Deleting key-value pair from the WeakMap

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

然后,我们使用 delete() 方法从 WeakMap 中删除了键值对。在删除键值对然后访问它时,WeakMap 会返回未定义,如你可以在输出中看到的那样。

Note − 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

因为它从 WeakMap 中删除了键值,所以它会返回 "undefined"。