Javascript 什么';ES6集和WeakSet的区别是什么?

Javascript 什么';ES6集和WeakSet的区别是什么?,javascript,ecmascript-6,weak-references,Javascript,Ecmascript 6,Weak References,ECMAScript 6有以下非常相似的集合:Set和WeakSet。它们之间有什么区别?主要区别在于对集合中对象的引用很强,而对弱集合中对象的引用很弱。这意味着,如果没有对WeakSet中的对象的其他引用,则可以对其进行垃圾收集 其他差异(或更确切地说是副作用)包括: 集合可以存储任何值。弱集仅是对象的集合 WeakSet没有size属性 WeakSet没有clear、key、value、entry和forEach方法 弱点是不可容忍的 集合只允许存储一次 存储在集合中的元素不存在 有一个

ECMAScript 6有以下非常相似的集合:
Set
WeakSet
。它们之间有什么区别?

主要区别在于对集合中对象的引用很强,而对弱集合中对象的引用很弱。这意味着,如果没有对WeakSet中的对象的其他引用,则可以对其进行垃圾收集

其他差异(或更确切地说是副作用)包括:

  • 集合可以存储任何值。弱集仅是对象的集合
  • WeakSet没有size属性
  • WeakSet没有clear、key、value、entry和forEach方法
  • 弱点是不可容忍的
      • 集合只允许存储一次
      • 存储在集合中的元素不存在 有一个键或索引。因此,很难使用 默认方法,如get()
      • 弱集仅接受对象作为其值
      • 如果未存储对对象的任何其他引用(引用较弱),则弱集不会阻止垃圾收集

      集合:-集合是一组值,其中每个值只能出现一次。主要方法有添加、删除、有、清除和大小

      WeakSet:-WeakSet对象允许您存储唯一密钥的集合。“WeakSet”密钥不能是基元类型。 它们也不能由数组或其他集合创建。WeakSet的值必须是对象引用。

      摘要: 弱集是包含一组对象的javascript对象。由于集合的性质,同一对象在集合中只能出现一个对象引用。弱集与普通集的不同之处如下:

    • 弱集只能保存其集合中的对象,不允许使用原始值(例如
      int
      boolean
      string
    • 对对象的引用保持为。这意味着,每当除了
      WeakSet
      之外没有其他对该对象的引用时,可以对该对象进行垃圾收集(即JS引擎将释放引用所指向的对象的内存) 例子:
      让myWeakSet=newweakset();
      设obj={};
      myWeakSet.add(obj);
      log(myWeakSet.has(obj));
      //断开对前面创建的对象的最后一个引用
      obj=5;
      //false,因为没有对weakset指向的对象的其他引用
      //因为weakset是唯一一个持有引用的对象,所以它释放了引用并进行了垃圾回收
      log(myWeakSet.has(obj));
      
      还有其他区别吗?与内存使用一样,性能差异?
      WeakSet是不可移植的
      那么我们为什么要使用它以及如何解析它呢?@VikasBansal
      WeakSet
      允许您在O(1)时间内检查是否已经添加了任何对象。您可以将其用作对象上的布尔检查,例如,一个已记忆的方法,另一个好处是,如果对象超出范围,您不会像在正常
      集合中那样浪费内存,因为它可以被垃圾收集。您的答案是否可能重复尚不清楚。我试图改进它,但我仍然认为缺少关于WeakSet是什么的信息。在您的示例中,使用Set而不是WeakSet将产生相同的结果
      myWeakSet
      在该点不包含对
      obj
      的引用,因为
      obj
      指向原语值5。这并没有说明
      WeakSet
      的弱引用行为。WeakSet将允许您在O(1)中搜索,其中as Set将花费O(n)时间。因此,如果搜索数组中的对象,weakset更喜欢,但在这个不变性的时代,谁会想做这样的事情呢。。。为什么不接受一个更安全的不变性选择呢。