WeakSet是类似于Set类的集合类之一,其他类包括Set、Map和WeakMap。WeakSet是一个存储弱对象引用的集合类,也就是说,如果对象的引用为空,该对象会被自动垃圾回收。所以WeakSet保存对象的弱引用。如果对象被引用/销毁,垃圾收集器会自动从WeakSet中删除该对象,从而减少内存消耗。
Typecript WeakSet
WeakSet类没有定义在typecript的内置类中。
我们可以在typescript中使用ES6集合类,为此,我们需要添加一些配置。请添加typescript的 "lib":["es6"] 的配置文件--即tsconfig.json文件,或者你可以添加polyfill.js来支持这个后端。
WeakSet声明和创建
使用new关键字创建空的WeakSet
new WeakSet()
也可以使用Iterable对象创建Set对象,Iterable对象是一个集合的数组。
`new WeakSet`(iterable : Object)
下面是一个例子 从一个对象的数组中创建WeakSet
var obj1 = { id: 1 };
var obj2 = { name: 'kiran' };
var weakSet = new WeakSet([[obj1, obj2]]);
console.log(weakSet);
方法
WeakSet提供了添加/删除、检查键、空集操作的方法,但没有实现可迭代操作。
WeakSet.add()方法
它向Set添加一个新的对象,并返回新修改的set语法
add(value : Object) : WeakSet
例子 以下是add()方法的一个例子
const weakSet = new WeakSet();
const obj = {id:1};
weakSet.add(obj);
console.log(weakSet);
输出是
[[Entries]]: Array(1)
0:value: {id: 1}
WeakSet.has()方法
has()方法如果对象已经存在于一个集合中,则返回真,否则返回假语法
下面是WeakSet has()方法的一个使用示例
const weakSet = new WeakSet();
const obj = {id:1};
console.log(weakSet);
console.log(weakSet.has(obj));// true
console.log(weakSet.has(null));//false
WeakSet.delete()方法
该方法将对象从一个集合中删除,如果存在则返回true,否则返回false。语法
delete(key : Object) : Boolean
以下是delete()方法的一个例子
const weakSet = new WeakSet();
const obj = { id: 1 };
weakSet.add(obj);
console.log(weakSet.delete(obj));// true
console.log(weakSet.delete(null));//false
在集合中允许的和不允许的对象
原始类型--字符串、布尔值、数字、未定义和共轭对象不允许存储在集合中。只有对象是允许的
var set = new WeakSet();
set.add(new Date()) // Date objects are acceptable
set.add({ objectkey: 'objectvalue' })// acceptable
set.add(false) // not acceptable, primitive not allowed to store in set
set.add('string') // not acceptable, primitive not allowed to store in set
set.add(123) // not acceptable, primitive not allowed to store in set