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

Map.prototype.size

Eigenschaft

Die Zugriffs-Eigenschaft <code>size</code> gibt die aktuelle Anzahl der Schlüssel-Wert-Paare in einer <code>Map</code> zurück.

seit JavaScript ES2015 Kategorie: method-property

Signatur

get Map.prototype.size

Beschreibung

Map.prototype.size ist eine schreibgeschützte Zugriffs-Eigenschaft (Getter). Sie liefert die Anzahl der Einträge, die sich zum Zeitpunkt des Zugriffs in der Map befinden. Anders als bei Arrays heißt die Eigenschaft size und nicht length.

Der Wert wird immer live ermittelt: Nach set() mit einem neuen Schlüssel steigt er um 1, nach erfolgreichem delete() sinkt er um 1, und nach clear() ist er 0. Wird set() mit einem bereits vorhandenen Schlüssel aufgerufen, ändert sich size nicht, weil nur der Wert überschrieben wird.

Typische Einsätze sind die Prüfung, ob eine Map leer ist, Größenbegrenzungen bei Caches (z. B. LRU-Cache) und Statistiken wie „Anzahl eindeutiger Werte“. Den Wert zu lesen kostet konstante Zeit (O(1)), weil die Einträge dafür nicht durchlaufen werden.

Rückgabewert

Typ
number
Beschreibung
Eine nicht-negative ganze Zahl: die Anzahl der Einträge in der Map.

Beispiele

Grundlegende Nutzung

const farben = new Map([
  ['rot', '#f00'],
  ['grün', '#0f0']
]);
console.log(farben.size);

farben.set('blau', '#00f');
console.log(farben.size);

// Vorhandener Schlüssel: nur der Wert wird überschrieben
farben.set('rot', '#ff0000');
console.log(farben.size);

farben.delete('grün');
console.log(farben.size);

farben.clear();
console.log(farben.size);
2 3 3 2 0

Eindeutige Wörter zählen

const text = 'der Hund und der Ball und die Katze';
const haeufigkeit = new Map();

for (const wort of text.split(' ')) {
  haeufigkeit.set(wort, (haeufigkeit.get(wort) ?? 0) + 1);
}

console.log(`Eindeutige Wörter: ${haeufigkeit.size}`);
Eindeutige Wörter: 6

Cache mit Größenbegrenzung (LRU)

const MAX_EINTRAEGE = 3;
const cache = new Map();

const merken = (schluessel, wert) => {
  if (cache.has(schluessel)) cache.delete(schluessel);
  cache.set(schluessel, wert);
  if (cache.size > MAX_EINTRAEGE) {
    // Ältesten Eintrag entfernen (Einfügereihenfolge)
    const aeltester = cache.keys().next().value;
    cache.delete(aeltester);
  }
};

['a', 'b', 'c', 'd'].forEach((k, i) => merken(k, i));
console.log(cache.size, [...cache.keys()]);
3 [ 'b', 'c', 'd' ]

Prüfen, ob eine Map leer ist

const sitzungen = new Map();

const istLeer = (map) => map.size === 0;

console.log(istLeer(sitzungen));
sitzungen.set('user-42', { angemeldet: Date.now() });
console.log(istLeer(sitzungen));
true false

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie map.size = 0 leert die Map nicht. Außerhalb des Strict Mode wird sie ignoriert, im Strict Mode (also auch in ES-Modulen und Klassen) wirft sie einen TypeError. Zum Leeren dient map.clear().
  • Nicht length: map.length ergibt undefined. Das ist ein häufiger Tippfehler, der ohne Fehlermeldung durchläuft.
  • Nur Eigenschaft, keine Methode: map.size() wirft TypeError: map.size is not a function.
  • Falsches this: Wird der Getter mit einem Objekt aufgerufen, das keine Map ist (z. B. über Object.getOwnPropertyDescriptor(Map.prototype, 'size').get.call({})), wirft er einen TypeError.
  • Schlüsselgleichheit: NaN zählt als ein einziger Schlüssel, ebenso +0 und -0 (SameValueZero-Vergleich). Objekte als Schlüssel werden dagegen nach Referenz unterschieden: Zwei inhaltlich gleiche Objekte ergeben zwei Einträge.
  • Bei WeakMap gibt es kein size, weil sich deren Einträge durch die Speicherbereinigung jederzeit ändern können.
  • Kompatibilität: wird seit ES2015 in allen modernen Browsern und in Node.js unterstützt.