WeakMap.prototype.delete 用于删除指定对象键的键值对,成功返回true,键无效或不存在返回false;必须使用原对象引用,原始值或不同引用的对象均无法删除。

WeakMap.prototype.delete 用于从 WeakMap 实例中移除指定键对应的键值对。它只接受一个参数(键),返回布尔值:删除成功返回 true,键不存在或不是有效对象时返回 false。
必须使用对象作为键才能删除
WeakMap 的键只能是对象(包括函数、数组、普通对象等),不能是原始值(如字符串、数字、null、undefined)。因此 delete 也只支持用**同一个对象引用**来删除:
- 如果传入的不是对象(比如字符串
"key"),直接返回false - 即使两个对象内容相同,但引用不同,也无法通过其中一个删除另一个
- 必须持有当初设值时用的那个对象变量,才能成功删除
基本用法示例
下面是一个典型操作流程:
const wm = new WeakMap();
const obj = {};
wm.set(obj, "data");
console.log(wm.has(obj)); // true
wm.delete(obj); // ✅ 成功删除
console.log(wm.has(obj)); // false
// 尝试用新对象删除 —— 不行
wm.set({}, "other");
console.log(wm.delete({})); // false(新对象,引用不同)
常见误用与注意事项
-
delete不会抛出错误,即使传入null或undefined,只是静默返回false - 无法遍历或清空整个
WeakMap,没有clear()方法,也不能获取键列表 - 若键对象被垃圾回收,对应条目自动消失,此时再调用
delete也会返回false - 不支持用
Symbol或其他非对象类型作键,否则set会报错,delete也无效
适合的使用场景
delete 主要用于需要显式清理私有元数据的场合,例如:
- 为 DOM 元素附加临时状态,并在元素卸载前主动清理
- 实现对象级别的缓存,且允许缓存随对象销毁而自动释放
- 避免内存泄漏时,配合生命周期管理做手动干预
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











