Signatur
Beschreibung
Mit new Set() legst du eine Sammlung eindeutiger Werte an. Übergibst du ein iterierbares Objekt (Array, String, Map, anderes Set, Generator …), werden alle seine Elemente der Reihe nach mit add() eingefügt. Doppelte Werte werden dabei still verworfen, die Einfügereihenfolge bleibt erhalten.
Ob zwei Werte gleich sind, entscheidet der Algorithmus SameValueZero: Wie bei ===, nur gilt NaN als gleich zu NaN, und +0 sowie -0 gelten als gleich. Objekte werden über ihre Referenz verglichen, nicht über ihren Inhalt.
Typische Anwendungsfälle sind das Entfernen von Duplikaten aus Arrays, schnelle Zugehörigkeitsprüfungen mit has() (im Mittel konstante Laufzeit statt linearer Suche wie bei Array.prototype.includes()) und das Verfolgen bereits besuchter Elemente, etwa bei Graph-Traversierungen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $iterable | Iterable<any> | null | undefined | undefined | Optionales iterierbares Objekt, dessen Elemente in das neue Set übernommen werden. Bei null oder undefined entsteht ein leeres Set. |
Rückgabewert
Set-Objekt mit den eindeutigen Werten aus iterable in Einfügereihenfolge.Beispiele
Duplikate aus einem Array entfernen
const tags = ['js', 'css', 'js', 'html', 'css'];
const uniqueTags = [...new Set(tags)];
console.log(uniqueTags);
Leeres Set anlegen und befüllen
const visited = new Set();
visited.add('/start').add('/produkte').add('/start');
console.log(visited.size);
console.log(visited.has('/produkte'));
Aus einem String eindeutige Zeichen ermitteln
const letters = new Set('Mississippi');
console.log([...letters].join(''));
Schnelle Zugehörigkeitsprüfung mit Objekt-Referenzen
const alice = { name: 'Alice' };
const admins = new Set([alice]);
console.log(admins.has(alice)); // gleiche Referenz
console.log(admins.has({ name: 'Alice' })); // neues Objekt
// Wichtig · Fallstricke
Set()muss mitnewaufgerufen werden – ein Aufruf ohnenewwirft einenTypeError.- Ein nicht iterierbares Argument (z. B. eine Zahl oder ein einfaches Objekt
{}) führt zu einemTypeError. Ein String wird dagegen in einzelne Zeichen (genauer: Codepoints) zerlegt, was oft nicht gewollt ist:new Set('abc')ergibt drei Einträge,new Set(['abc'])einen. - Objekte und Arrays werden über die Referenz verglichen –
new Set([[1], [1]])hat die Größe 2. Für inhaltliche Eindeutigkeit Werte vorher z. B. perJSON.stringifyin einen Schlüssel umwandeln. - Der Konstruktor ruft intern
this.add()auf; wer vonSeterbt undaddüberschreibt, beeinflusst also auch die Initialbefüllung. - Die Mengenoperationen
union(),intersection(),difference()usw. sind neuer (ES2025, Baseline 2024) und in älteren Umgebungen nicht vorhanden. Der Konstruktor selbst funktioniert in allen modernen Browsern und in Node.js.