Start · Sprachen · JavaScript · Referenz · new Set()

new Set()

Methode

Der <code>Set()</code>-Konstruktor erzeugt ein neues <code>Set</code>-Objekt, das jeden Wert nur einmal speichert – optional befüllt aus einem iterierbaren Objekt.

seit JavaScript ES2015 Kategorie: method-property

Signatur

new Set(iterable)

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

Typ
Set
Beschreibung
Ein neues 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);
[ 'js', 'css', 'html' ]

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'));
2 true

Aus einem String eindeutige Zeichen ermitteln

const letters = new Set('Mississippi');
console.log([...letters].join(''));
Misp

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
true false

// Wichtig · Fallstricke

  • Set() muss mit new aufgerufen werden – ein Aufruf ohne new wirft einen TypeError.
  • Ein nicht iterierbares Argument (z. B. eine Zahl oder ein einfaches Objekt {}) führt zu einem TypeError. 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. per JSON.stringify in einen Schlüssel umwandeln.
  • Der Konstruktor ruft intern this.add() auf; wer von Set erbt und add ü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.