javascript中Es6 WeakSet类的例子 | Typescript

227 阅读2分钟

WeakSet是类似于Set类的集合类之一,其他类包括SetMapWeakMap。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