WeakMap and WeakSet(弱映射和弱集合)

通常,当对象、数组这类数据结构在内存中时,它们的子元素,如对象的属性、数组的元素都是可以访问的。例如,如果把一个对象放入到数组中,那么只要这个数组存在,那么这个对象也就存在,即使没有其他对该对象的引用。

let john = { name: "John" };

let array = [ john ];

john = null;

// 覆盖引用 // 前面由 john 所引用的那个对象被存储在了 array 中 // 所以它不会被垃圾回收机制回收

WeakMap

WeakMap 和 Map 的第一个不同点就是,WeakMap 的键必须是对象,不能是原始值:

        let weakmap =new  WeakMap();
        let obj = {};
        weakmap.set(obj,123);
        alert(weakmap.get(obj))
现在,如果我们在 weakMap 中使用一个对象作为键,并且没有其他对这个对象的引用 —— 该对象将会被从内存(和map)中自动清除。
posted @ 2021-03-05 17:28  大叔学编程  阅读(33)  评论(0)    收藏  举报