什么是ES6中的WeakMap
WeakMap是ES6中引入的一种新的数据结构或集合。WeakMap可以存储一组键值对。它采用了Map的属性。主要区别是WeakMap的键值不能是基本数据类型。键必须是对象类型,而值可以是任何数据类型。
另一个主要区别是WeakMap的 键 是弱引用。这意味着当一个对象被用作WeakMap的键时,如果该对象的引用丢失(即将该对象引用赋值为NULL),它可能会被垃圾收集。当对象不再使用时,JavaScript的垃圾收集机制会检测到并从内存中释放该对象。因此,WeakMap的键是弱引用的。
语法:
const m = new WeakMap();
参数: 这是一个可迭代对象,其元素采用键值对的形式。
WeakMap的功能:
- set(key, value) : 此函数用于向WeakMap对象中添加一个元素(键值对)。
- get(key) : 返回与指定“key”相关联的值。
- has(key) : 此函数用于检查WeakMap中是否存在指定的“key”。如果存在则返回 true ,否则返回 false 。
- delete(key) : 从WeakMap对象中删除指定“key”的元素。
示例: JavaScript代码展示这些函数的工作原理。
JavaScript
// Creating a WeakMap Object
const m = new WeakMap();
// Adding elements in it
// Remember, only object can
// be a key in WeakMap
obj1 = {}
m.set(obj1, "Object 1");
obj2 = {}
m.set(obj2, "Object 2");
// Use delete() function
m.delete(obj2);
// Print the WeakMap
console.log(m);
// Using get() function to get
// specific element in WeakMap
console.log(m.get(obj1));
// Using has() function to check
// if a particular element is
// present in WeakMap or not.
console.log(m.has(obj1));
输出: 以下是在浏览器中上述代码的输出。

解释:
- 第一行打印了WeakMap的内容。
- 我们在打印之前删除了obj2,因此在控制台中不会显示它。
- 在第二行中,我们使用.get(obj1)函数,因此它返回了值,即Object 1。
- 第三行是我们尝试查找WeakMap ‘m’中是否存在obj1,它返回 true 。
极客教程