弱集

基线 广泛可用

此功能已得到很好的建立,可在许多设备和浏览器版本中使用。从那时起,它就可以跨浏览器使用了 2015年9月.

A类弱集是垃圾可收集值的集合,包括对象和非注册符号。中的值弱集只能发生一次。它在弱集的收藏。

描述

WeakSets的值必须是垃圾可收集的。大多数基本数据类型可以任意创建,并且没有生命周期,因此无法存储。对象和未注册符号可以存储,因为它们是垃圾可收集的。

设置对象包括:

  • 弱集s是的集合仅对象和符号。它们不能包含任何类型的任意值,因为设置s可以。
  • 这个弱集虚弱的,表示对中对象的引用弱集被持有。如果没有其他对存储在弱集如果存在,则可以对这些值进行垃圾收集。

    注:这也意味着集合中没有存储的当前值列表。弱势群体不可枚举。

用例:检测循环引用

递归调用自身的函数需要一种通过跟踪已处理的对象来防范循环数据结构的方法。

弱集s非常适合用于此目的:

js型
//对对象中存储的所有内容执行回调函数execRecurrively(fn,subject,_refs=new WeakSet()){//避免无限递归if(_refs.has(subject)){回报;}fn(受试者);if(主题类型===“对象”&&subject){_参考文献添加(主题);for(主题中的常量键){execRecurrively(fn,subject[key],_refs);}_参考删除(主题);}}常量foo={foo:“foo”,巴:{bar:“bar”,},};foo.bar.baz=foo;//循环引用!execRecursively((obj)=>控制台.log(obj,foo);

这里,a弱集在第一次运行时创建,并与随后的每个函数调用一起传递(使用内部_参考参数)。

对象的数量或遍历顺序是无关紧要的,因此弱集设置用于跟踪对象引用,尤其是涉及大量对象时。

施工单位

弱集()

创建新的弱集对象。

实例属性

这些属性定义于WeakSet.原型并由所有人共享弱集实例。

WeakSet.原型.结构

创建实例对象的构造函数。对于弱集实例,初始值为弱集构造函数。

WeakSet.protype[Symbol.toStringTag]

的初始值[Symbol.toStringTag]属性是字符串“弱集”。此属性用于Object.prototype.toString().

实例方法

WeakSet.prototype.add()

追加价值弱集对象。

WeakSet.prototype.delete()

删除价值来自弱集.WeakSet.prototype.has(值)将返回之后。

WeakSet.prototype.has()

返回一个布尔值断言价值存在于弱集对象与否。

示例

使用WeakSet对象

js型
const ws=新的WeakSet();常量foo={};常量栏={};ws.add(foo);ws.add(bar);ws.has(foo);//真的ws.has(bar);//真的ws.delete(foo);//从集合中删除foows.has(foo);//false,已删除foows.has(bar);//对,保留条形图

请注意foo!==酒吧.虽然它们是相似的对象,他们不是同一对象因此,它们都被添加到集合中。

规格

规范
ECMAScript语言规范
#sec-wakset-对象

浏览器兼容性

BCD表仅在浏览器中加载

另请参见