| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/WeakSet | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit September 2015 browserbergreifend verfgbar.
* Einige Teile dieser Funktion werden mglicherweise unterschiedlich gut untersttzt.
Ein WeakSet ist eine Sammlung von garbage-collectierbaren Werten, einschlielich Objekten und nicht registrierten Symbolen. Ein Wert im WeakSet kann nur einmal vorkommen. Er ist einzigartig in der Sammlung des WeakSet.
Werte in WeakSets mssen garbage-collectierbar sein. Die meisten primitiven Datentypen knnen willkrlich erstellt werden und haben keine Lebensdauer, daher knnen sie nicht gespeichert werden. Objekte und nicht registrierte Symbole knnen gespeichert werden, da sie garbage-collectierbar sind.
Die Hauptunterschiede zum Set-Objekt sind:
WeakSets sind Sammlungen von nur Objekten und Symbolen. Sie knnen keine beliebigen Werte beliebigen Typs enthalten, wie es bei Sets der Fall ist.
Der WeakSet ist schwach, was bedeutet, dass Referenzen auf Objekte in einem WeakSet schwach gehalten werden. Wenn keine anderen Referenzen auf einen im WeakSet gespeicherten Wert existieren, knnen diese Werte garbage-collectiert werden.
Hinweis:
Dies bedeutet auch, dass es keine Liste der aktuell in der Sammlung gespeicherten Werte gibt. WeakSets sind nicht aufzhlbar.
Wie bei regulren Sets basiert die Wertgleichheit auf dem SameValueZero-Algorithmus, der dem ===-Operator entspricht, da WeakSet nur Objekt- und Symbolwerte enthalten kann. Das bedeutet, dass bei Objektwerten die Gleichheit auf der Objektidentitt basiert. Sie werden anhand der Referenz verglichen, nicht anhand des Werts.
WeakSet()Erstellt ein neues WeakSet-Objekt.
Diese Eigenschaften sind auf WeakSet.prototype definiert und werden von allen WeakSet-Instanzen geteilt.
WeakSet.prototype.constructorDie Konstruktorfunktion, die das Instanzobjekt erstellt hat. Fr WeakSet-Instanzen ist der Anfangswert der WeakSet-Konstruktor.
WeakSet.prototype[Symbol.toStringTag]Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "WeakSet". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
WeakSet.prototype.add()Fgt 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 zurck, der anzeigt, ob der angegebene Wert in diesem WeakSet vorhanden ist oder nicht.
const ws = new WeakSet();
const foo = {};
const bar = {};
ws.add(foo);
ws.add(bar);
ws.has(foo); // true
ws.has(bar); // true
ws.delete(foo); // removes foo from the set
ws.has(foo); // false, foo has been removed
ws.has(bar); // true, bar is retained
Beachten Sie, dass foo !== bar. Obwohl sie hnliche Objekte sind, sind sie nicht dasselbe Objekt. Und so werden beide zum Set hinzugefgt.
Funktionen, die sich rekursiv aufrufen, bentigen eine Mglichkeit, gegen zirkulre Datenstrukturen zu schtzen, indem sie verfolgen, welche Objekte bereits verarbeitet wurden.
WeakSets sind fr diesen Zweck ideal:
// Execute a callback on everything stored inside an object
function 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 Ausfhrung ein WeakSet erstellt und bei jedem nachfolgenden Funktionsaufruf (unter Verwendung des internen _refs-Parameters) weitergegeben.
Die Anzahl der Objekte oder ihre Traversierung ist unwesentlich, daher ist ein WeakSet geeigneter (und leistungsfhiger) als ein Set zum Verfolgen von Objektreferenzen, insbesondere wenn eine sehr groe Anzahl von Objekten beteiligt ist.
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-weakset-objects |
WeakSetObject/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |