Signatur
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
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);
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}`);
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()]);
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));
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
map.size = 0leert die Map nicht. Außerhalb des Strict Mode wird sie ignoriert, im Strict Mode (also auch in ES-Modulen und Klassen) wirft sie einenTypeError. Zum Leeren dientmap.clear(). - Nicht
length:map.lengthergibtundefined. Das ist ein häufiger Tippfehler, der ohne Fehlermeldung durchläuft. - Nur Eigenschaft, keine Methode:
map.size()wirftTypeError: map.size is not a function. - Falsches
this: Wird der Getter mit einem Objekt aufgerufen, das keine Map ist (z. B. überObject.getOwnPropertyDescriptor(Map.prototype, 'size').get.call({})), wirft er einenTypeError. - Schlüsselgleichheit:
NaNzählt als ein einziger Schlüssel, ebenso+0und-0(SameValueZero-Vergleich). Objekte als Schlüssel werden dagegen nach Referenz unterschieden: Zwei inhaltlich gleiche Objekte ergeben zwei Einträge. - Bei
WeakMapgibt es keinsize, 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.