弱点集

基线 广泛可用*

此功能已得到很好的建立,可在许多设备和浏览器版本中使用。从那时起,它就可以跨浏览器使用了 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.prototype.constructor(弱点集.程序类型.结构)

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

WeakSet.prototype[Symbol.toStringTag]

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

实例方法

WeakSet.prototype.add()

追加价值弱点集对象。

WeakSet.prototype.delete()

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

WeakSet.prototype.has()

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

示例

使用WeakSet对象

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

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

规格

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

浏览器兼容性

另请参见