Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. WeakSet

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

WeakSet

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨September 2015⁩.

* Some parts of this feature may have varying levels of support.

EinWeakSet ist eine Sammlung von garbage-collectierbaren Werten, einschließlich Objekten undnicht registrierten Symbolen. Ein Wert imWeakSet kann nur einmal vorkommen. Er ist einzigartig in der Sammlung desWeakSet.

Beschreibung

Werte in WeakSets müssen garbage-collectierbar sein. Die meistenprimitiven Datentypen können willkürlich erstellt werden und haben keine Lebensdauer, daher können sie nicht gespeichert werden. Objekte undnicht registrierte Symbole können gespeichert werden, da sie garbage-collectierbar sind.

Die Hauptunterschiede zumSet-Objekt sind:

  • WeakSets sind Sammlungen vonnur Objekten und Symbolen. Sie können keine beliebigen Werte beliebigen Typs enthalten, wie es beiSets der Fall ist.

  • DerWeakSet istschwach, was bedeutet, dass Referenzen auf Objekte in einemWeakSetschwach gehalten werden. Wenn keine anderen Referenzen auf einen imWeakSet gespeicherten Wert existieren, können diese Werte garbage-collectiert werden.

    Hinweis:Dies bedeutet auch, dass es keine Liste der aktuell in der Sammlung gespeicherten Werte gibt.WeakSets sind nicht aufzählbar.

Schlüsselgleichheit

Wie bei regulärenSets basiert die Wertgleichheit auf demSameValueZero-Algorithmus, der dem===-Operator entspricht, daWeakSet nur Objekt- und Symbolwerte enthalten kann. Das bedeutet, dass bei Objektwerten die Gleichheit auf der Objektidentität basiert. Sie werden anhand derReferenz verglichen, nicht anhand des Werts.

Konstruktor

WeakSet()

Erstellt ein neuesWeakSet-Objekt.

Instanz-Eigenschaften

Diese Eigenschaften sind aufWeakSet.prototype definiert und werden von allenWeakSet-Instanzen geteilt.

WeakSet.prototype.constructor

Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. FürWeakSet-Instanzen ist der Anfangswert derWeakSet-Konstruktor.

WeakSet.prototype[Symbol.toStringTag]

Der Anfangswert der[Symbol.toStringTag]-Eigenschaft ist der String"WeakSet". Diese Eigenschaft wird inObject.prototype.toString() verwendet.

Instanz-Methoden

WeakSet.prototype.add()

Fügt den angegebenen Wert in dieses Set ein, falls er nicht bereits vorhanden ist.

WeakSet.prototype.delete()

Entfernt den angegebenen Wert aus diesem Set, falls er sich im Set befindet.

WeakSet.prototype.has()

Gibt einen booleschen Wert zurück, der anzeigt, ob der angegebene Wert in diesemWeakSet vorhanden ist oder nicht.

Beispiele

Verwenden des WeakSet-Objekts

js
const ws = new WeakSet();const foo = {};const bar = {};ws.add(foo);ws.add(bar);ws.has(foo); // truews.has(bar); // truews.delete(foo); // removes foo from the setws.has(foo); // false, foo has been removedws.has(bar); // true, bar is retained

Beachten Sie, dassfoo !== bar. Obwohl sie ähnliche Objekte sind,sind sie nichtdasselbe Objekt. Und so werden beide zum Set hinzugefügt.

Erkennen von zirkulären Referenzen

Funktionen, die sich rekursiv aufrufen, benötigen eine Möglichkeit, gegen zirkuläre Datenstrukturen zu schützen, indem sie verfolgen, welche Objekte bereits verarbeitet wurden.

WeakSets sind für diesen Zweck ideal:

js
// Execute a callback on everything stored inside an objectfunction execRecursively(fn, subject, _refs = new WeakSet()) {  // Avoid infinite recursion  if (_refs.has(subject)) {    return;  }  fn(subject);  if (typeof subject === "object" && subject) {    _refs.add(subject);    for (const key in subject) {      execRecursively(fn, subject[key], _refs);    }    _refs.delete(subject);  }}const foo = {  foo: "Foo",  bar: {    bar: "Bar",  },};foo.bar.baz = foo; // Circular reference!execRecursively((obj) => console.log(obj), foo);

Hier wird bei der ersten Ausführung einWeakSet erstellt und bei jedem nachfolgenden Funktionsaufruf (unter Verwendung des internen_refs-Parameters) weitergegeben.

Die Anzahl der Objekte oder ihre Traversierung ist unwesentlich, daher ist einWeakSet geeigneter (und leistungsfähiger) als einSet zum Verfolgen von Objektreferenzen, insbesondere wenn eine sehr große Anzahl von Objekten beteiligt ist.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-weakset-objects

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp