Signatur
Beschreibung
Set.prototype.size ist eine schreibgeschützte Zugriffseigenschaft (Getter). Sie liefert, wie viele eindeutige Werte das Set gerade enthält. Weil ein Set doppelte Werte automatisch verwirft, ist size der einfachste Weg, die Zahl der unterschiedlichen Einträge einer Sammlung zu ermitteln.
Anders als bei Arrays heißt die Eigenschaft nicht length, sondern size. Das gilt genauso für Map. Der Wert wird bei jedem Zugriff aktuell ermittelt: Nach add(), delete() oder clear() zeigt size sofort den neuen Stand an.
Typische Einsatzfälle sind Duplikate zählen, prüfen, ob ein Set leer ist (set.size === 0), Obergrenzen einhalten (z. B. höchstens n ausgewählte Elemente) oder Werte in Statistiken und Benutzeroberflächen anzeigen.
Rückgabewert
Set.Beispiele
Eindeutige Werte zählen
const besuche = ['anna', 'ben', 'anna', 'clara', 'ben'];
const besucher = new Set(besuche);
console.log(besuche.length); // alle Einträge
console.log(besucher.size); // eindeutige Besucher
size ändert sich nach add, delete und clear
const tags = new Set();
tags.add('js').add('css').add('js'); // 'js' nur einmal
console.log(tags.size);
tags.delete('css');
console.log(tags.size);
tags.clear();
console.log(tags.size === 0 ? 'leer' : 'nicht leer');
Obergrenze für eine Auswahl einhalten
const MAX_AUSWAHL = 3;
const auswahl = new Set();
const waehle = (id) => {
if (auswahl.has(id)) return true;
if (auswahl.size >= MAX_AUSWAHL) {
console.warn(`Höchstens ${MAX_AUSWAHL} Einträge erlaubt`);
return false;
}
auswahl.add(id);
return true;
};
[1, 2, 2, 3, 4].forEach(waehle);
console.log(auswahl.size, [...auswahl]);
// Wichtig · Fallstricke
- Schreibgeschützt:
sizehat keinen Setter. Eine Zuweisung wieset.size = 0wird außerhalb des Strict Mode stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. Leeren Sie ein Set stattdessen mitclear(). - Keine Methode: Schreiben Sie
set.size, nichtset.size(). Der Aufruf mit Klammern wirft einenTypeError. - Nicht
length:set.lengthergibtundefined. Wer von Arrays kommt, verwechselt das leicht. - Gleichheit: Für die Eindeutigkeit gilt SameValueZero.
NaNzählt deshalb nur einmal, und0und-0gelten als gleich. Objekte werden über ihre Referenz verglichen: Zwei gleich aussehende Objekte zählen also doppelt. - Wird der Getter auf einem Objekt aufgerufen, das kein
Setist (z. B. überObject.getOwnPropertyDescriptor(Set.prototype, 'size').get.call({})), gibt es einenTypeError. WeakSethat keinesize-Eigenschaft, weil seine Einträge jederzeit vom Garbage Collector entfernt werden können.- Kompatibilität: Wird von allen modernen Browsern und von Node.js unterstützt (Baseline seit ES2015).