JavaScript WeakSet和WeakMap
在JavaScript中,有两种类型的引用:强引用和弱引用。WeakSet和WeakMap被称为弱引用。由于这些是弱引用,如果它们是内存中对象的唯一引用,它们不会阻止垃圾回收。这些对象很少使用,但在我们希望自动管理内存使用时非常有用。
JavaScript WeakSet: 它用于存储一组对象,与set集合类似,唯一的区别是这些值只能是对象,而不是特定的数据类型。
语法:
new WeakSet(object)
示例: 在这个示例中,我们将创建一个新的WeakSet对象,并使用内置方法向其添加元素。
JavaScript
var x = new WeakSet();
var y = new WeakSet(null);
x.add({});
x.add({});
console.log(x);
console.log(y);
输出:
WeakSet {{…}, {…}}
WeakSet {}
JavaScript WeakMap: 在JavaScript中,WeakMap用于以键值对的形式存储值,但与其他类型的映射不同的是,键是弱引用方式。键始终应该是一个JavaScript对象,而值可以是任何原始的JavaScript数据类型。
示例: 在此示例中,我们将创建一个WeakMap对象并向其添加元素。
JavaScript
function myGeeks() {
var looseMap = new WeakMap();
looseMap.set({}, "Ram");
looseMap.set({}, "Raj");
looseMap.set({}, "Rahul");
console.log(looseMap);
}
myGeeks();
输出:
WeakMap {{…} => 'Raj', {…} => 'Rahul', {…} => 'Ram'}
如何选择?
WeakMap 用于创建类似于 Map 的结构,所以当数据需要以键值对的形式存储时,可以使用它。由于它是弱引用,所以仅在数据剩下的唯一引用是它自己时才使用它,这样数据就可以自动从内存中删除。当我们希望在对象集合中具有唯一值时,可以使用 WeakSet。WeakSet 的用法类似于 Set,而且它也是弱引用。
WeakSet | WeakMap |
---|---|
它是一个只包含唯一对象的集合 | 它是一个包含键值对的集合 |
Map 是二维的 | Set 是一维的 |
可以使用键来访问值 | 可以使用内置方法来访问值 |
键严格地只能是对象,而值可以是基本数据类型 | 它只能将对象作为值,而不能是其他基本数据类型 |