📅  最后修改于: 2023-12-03 15:31:38.981000             🧑  作者: Mango
JavaScript WeakMap是ES6引入的新特性之一,它是一种弱引用的map结构,使用键值对存储数据,但是键只能是对象类型。WeakMap中的键没有被引用时,可以被垃圾回收机制回收,从而避免了内存泄漏的问题。
可以通过以下两种方式来创建WeakMap:
const myWeakMap = new WeakMap();
const myObject = {
name: "Alice",
age: 30
};
const myWeakMap = new WeakMap([[myObject, "someValue"]]);
WeakMap仅有以下方法:
在WeakMap中添加一条键值对,其中key只能是对象类型。
const myWeakMap = new WeakMap();
const myObject = {};
myWeakMap.set(myObject, "someValue");
获取key对应的值。
const myWeakMap = new WeakMap();
const myObject = {};
myWeakMap.set(myObject, "someValue");
myWeakMap.get(myObject); // "someValue"
判断WeakMap中是否有指定的key。
const myWeakMap = new WeakMap();
const myObject = {};
myWeakMap.set(myObject, "someValue");
myWeakMap.has(myObject); // true
删除指定的key所对应的键值对。
const myWeakMap = new WeakMap();
const myObject = {};
myWeakMap.set(myObject, "someValue");
myWeakMap.delete(myObject);
WeakMap常被用于需要缓存某些对象的场景,比如缓存DOM节点。
由于DOM节点可能被删除,因此可以使用WeakMap将其缓存,避免内存泄漏。
const elementCache = new WeakMap();
function getElement(selector) {
if (elementCache.has(selector)) {
return elementCache.get(selector);
}
const element = document.querySelector(selector);
elementCache.set(selector, element); // 缓存DOM节点
return element;
}
由于WeakMap中的键是弱引用,存在回收的可能性,因此不能像普通Map那样使用for...of遍历WeakMap。
另外,键只能是对象类型,且不能直接获取WeakMap的大小。
JavaScript WeakMap是一种弱引用的map结构,可以避免内存泄漏的问题,常被用于缓存某些对象的场景。但是需要注意其语法上的限制和注意事项。