Start · Sprachen · JavaScript · Referenz · Set.prototype.size

Set.prototype.size

Eigenschaft

Die Zugriffseigenschaft <code>size</code> gibt die Anzahl der eindeutigen Elemente in einem <code>Set</code> zurück.

seit JavaScript ES2015 Kategorie: method-property

Signatur

get Set.prototype.size

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

Typ
number
Beschreibung
Eine ganze Zahl ≥ 0: die Anzahl der eindeutigen Elemente im 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
5 3

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');
2 1 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]);
Höchstens 3 Einträge erlaubt 3 [1, 2, 3]

// Wichtig · Fallstricke

  • Schreibgeschützt: size hat keinen Setter. Eine Zuweisung wie set.size = 0 wird außerhalb des Strict Mode stillschweigend ignoriert und löst im Strict Mode einen TypeError aus. Leeren Sie ein Set stattdessen mit clear().
  • Keine Methode: Schreiben Sie set.size, nicht set.size(). Der Aufruf mit Klammern wirft einen TypeError.
  • Nicht length: set.length ergibt undefined. Wer von Arrays kommt, verwechselt das leicht.
  • Gleichheit: Für die Eindeutigkeit gilt SameValueZero. NaN zählt deshalb nur einmal, und 0 und -0 gelten 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 Set ist (z. B. über Object.getOwnPropertyDescriptor(Set.prototype, 'size').get.call({})), gibt es einen TypeError.
  • WeakSet hat keine size-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).