Start · Sprachen · JavaScript · Referenz · Set.prototype.clear()

Set.prototype.clear()

Methode

Entfernt alle Elemente aus einem <code>Set</code>. Danach ist <code>size</code> gleich <code>0</code>.

seit JavaScript ES2015 Kategorie: method-property

Signatur

Set.prototype.clear()

Beschreibung

Die Methode clear() leert ein Set vollständig und verändert dabei die bestehende Instanz direkt. Danach hat set.size den Wert 0, und has() gibt für jeden Wert false zurück.

Sinnvoll ist das, wenn andere Teile des Programms eine Referenz auf dasselbe Set halten, etwa einen Cache, eine Auswahl von IDs oder eine Liste bereits verarbeiteter Einträge. Mit set = new Set() würdest du nur die eigene Variable neu belegen. Alle anderen Referenzen zeigen dann weiter auf das alte, gefüllte Set.

Der Rückgabewert ist immer undefined. Deshalb lässt sich clear() nicht wie add() verketten.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert (undefined).

Beispiele

Set vollständig leeren

const tags = new Set(['js', 'css', 'html']);
console.log(tags.size);

tags.clear();
console.log(tags.size);
console.log(tags.has('js'));
3 0 false

Geteilte Auswahl zurücksetzen (Referenz bleibt erhalten)

const selection = new Set();
const toolbar = { selection }; // eine zweite Stelle hält dieselbe Referenz

selection.add(101).add(102).add(107);
console.log(toolbar.selection.size);

// Alles abwählen: clear() wirkt auf alle Referenzen
selection.clear();
console.log(toolbar.selection.size);
3 0

Cache für bereits verarbeitete URLs leeren

const visited = new Set();

const crawl = (url) => {
  if (visited.has(url)) return 'übersprungen';
  visited.add(url);
  return 'verarbeitet';
};

console.log(crawl('/start'));
console.log(crawl('/start'));

visited.clear(); // neuer Durchlauf
console.log(crawl('/start'));
verarbeitet übersprungen verarbeitet

clear() gibt undefined zurück

const s = new Set([1, 2]);
const result = s.clear();
console.log(result);
// s.clear().add(3); // TypeError: Cannot read properties of undefined
undefined

// Wichtig · Fallstricke

  • Nicht verkettbar: clear() gibt undefined zurück. Ein Aufruf wie set.clear().add(x) löst einen TypeError aus.
  • clear() oder new Set()? clear() ändert die bestehende Instanz. Alle Stellen, die eine Referenz darauf halten, sehen danach ein leeres Set. Eine neue Zuweisung ändert nur die eigene Variable.
  • Während der Iteration: Rufst du clear() innerhalb von for...of oder forEach auf, endet die Schleife nach dem aktuellen Durchlauf. Weitere Elemente werden nicht mehr besucht.
  • Speicher: Die Objekte im Set werden nicht gelöscht. Nur die Referenzen des Sets auf sie verschwinden, sodass die Speicherbereinigung sie freigeben kann, wenn sonst niemand mehr auf sie zeigt.
  • WeakSet: WeakSet hat keine clear()-Methode mehr. Sie war früher vorhanden, wurde aber aus der Spezifikation entfernt.
  • Seit ES2015 in allen modernen Browsern und in Node.js verfügbar.