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>
输出
如果我们执行该程序,它会返回与 “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 after deletion is: undefined
当键值从 WeakMap 中删除时,它返回 “undefined”。