如何理解JavaScript中的WeakMap

如何理解JavaScript中的WeakMap

WeakMap对象存储键值对。键应为对象,并且值可以是任意类型。在JavaScript中,可以使用2个数组来创建一个map API,一个用于存储键,一个用于存储值,这两个数组被四个API函数共享。设置map中的元素时,需要同时将键和值插入到这两个数组的顶部。因此,键和值的索引将对应于每个数组中的元素。

要从map中获取值,需要通过循环遍历所有键,直到找到匹配的键,然后使用该键的索引从值数组中提取相关项。Map和WeakMap之间的区别在于,键必须是对象且仅被弱引用。这意味着如果没有其他强引用指向键,则垃圾回收器可以删除WeakMap中的元素。

语法:

new WeakMap([iterable])
JavaScript

参数: WeakMap对象接受一个参数,可以是任何可迭代对象。例如,一个包含键/值对的数组。

示例1:获取与键相关的值- 使用 get()函数 来检索与键相关联的值。如果与键相关联的值不存在,则返回undefined。

Javascript

const obj1 = {},
obj2 = {};
 
const weakmap = new WeakMap([[obj1, 100]]);
 
// Printing values
console.log(weakmap.get(obj1)); // 100
console.log(weakmap.get(obj2)); // undedfined
JavaScript

输出:

100
undefined
JavaScript

示例2:对键进行赋值 – 使用 .set() 函数 将一个值赋给键。它返回WeakMap对象,允许您链接.set()命令。

JavaScript

const obj1 = {};
 
const weakmap = new WeakMap();
weakmap.set(obj1, "gfg");
 
// Printing value
console.log(weakmap.get(obj1));
JavaScript

输出结果:

gfg
JavaScript

示例3:验证是否存在具有特定键的元素 – 使用 .has()函数 来检查WeakMap中是否存在具有相同键的元素。若存在,则返回true;否则返回false。

Javascript

const obj1 = {},
obj2 = {};
 
const weakmap = new WeakMap([[obj1, "gfg"]]);
 
// Printing values
console.log(weakmap.has(obj1)); // true
console.log(weakmap.has(obj2)); // false
JavaScript

输出:

true
false
JavaScript

示例4:使用键删除元素 使用.delete()方法删除具有精确键的元素。如果组件存在并被删除,则返回true;否则返回false。

Javascript

const obj1 = {};
 
const weakmap = new WeakMap([[obj1, "gfg"]]);
 
// Printing values
console.log(weakmap.delete(obj1)); // true
console.log(weakmap.has(obj1)); // false
JavaScript

输出:

true
false
JavaScript

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册