原生

梗概

  • Mapset一个对象的时候, 这个对象会被判定为被这个Map对象所引用

示例

// Map 导致的内存保留
const map = new Map();
let mapKey = { name: 'Map Key' };
map.set(mapKey, 'data');
mapKey = null; // 手动解除引用
console.log(map.has(mapKey)); // false,但原始对象仍被 Map 保留
// WeakMap 的弱引用特性
const weakMap = new WeakMap();
let weakKey = { name: 'Weak Key' };
weakMap.set(weakKey, 'data');
weakKey = null; // 解除引用
// 此时,若 weakKey 无其他引用,垃圾回收会自动清除 weakMap 中的对应项

注意

  • WeakMap的键只能是对象, 不能是其他数据类型