JavaScript - WeakMap 对象


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

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

如果使用除对象之外的其他数据类型的值作为 WeakMap 的键,则会出现 Types 错误。

语法

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


 const weak_map = new WeakMap();

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

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

WeakMap 属性

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

名称 描述
constructor

获取 WeakMap.

WeakMap 方法

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

名称 描述
delete()

从 WeakMap 中删除单个键值对。

get()

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

has()

检查 WeakMap 中存在 key 时是否存在特定对象。

set()

在 WeakMap 中插入键值对。

WeakMap 构造函数()

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

名称 名称和描述
WeakMap()

创建 WeakMap 对象。

例子

示例:向 WeakMap 插入键值对

在下面的示例中,我们使用 constructor 函数定义了 WeakMap。之后,我们使用 set() 方法将 laptop 对象设置为 key,并将其 price 设置为值。

最后,我们使用 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

当键值从 WeakMap 中删除时,它返回 “undefined”。