Signatur
Beschreibung
Mit new Map() legst du eine Map an. Das ist eine Sammlung von Schlüssel-Wert-Paaren, bei der die Einfügereihenfolge erhalten bleibt und beliebige Werte als Schlüssel dienen können, also auch Objekte, Funktionen oder NaN. Anders als bei einfachen Objekten gibt es keine geerbten Schlüssel aus dem Prototyp, und die Größe liest du direkt über size ab.
Optional übergibst du ein iterierbares Objekt, dessen Elemente selbst Schlüssel-Wert-Paare sind, zum Beispiel ein Array aus zweielementigen Arrays wie [[key, value], ...], eine andere Map oder das Ergebnis von Object.entries(). Jedes Paar wird intern über set() eingefügt. Taucht ein Schlüssel mehrfach auf, gewinnt der letzte Wert.
Eine Map eignet sich besonders für Caches, Zuordnungen von DOM-Knoten oder Objekten zu Metadaten, Zähler und alle Fälle mit häufigem Hinzufügen und Entfernen. Für reine, serialisierbare Konfigurationsdaten mit String-Schlüsseln sind einfache Objekte oft praktischer.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $iterable | Iterable<[any, any]> | null | undefined | undefined | Iterierbares Objekt (z. B. Array, Map, Generator), dessen Elemente Schlüssel-Wert-Paare in der Form [key, value] sind. Bei null oder undefined entsteht eine leere Map. |
Rückgabewert
Map-Objekt, das die übergebenen Paare in Einfügereihenfolge enthält.Beispiele
Leere Map anlegen und befüllen
const preise = new Map();
preise.set('Apfel', 0.5).set('Birne', 0.8);
console.log(preise.size);
console.log(preise.get('Birne'));
Map aus Array-Paaren und aus Objekt erzeugen
const status = new Map([
[200, 'OK'],
[404, 'Not Found'],
[500, 'Internal Server Error']
]);
console.log(status.get(404));
const config = { host: 'localhost', port: 8080 };
const configMap = new Map(Object.entries(config));
console.log([...configMap.keys()]);
Objekte als Schlüssel – Metadaten-Cache
const cache = new Map();
const ladeNutzer = async (user) => {
if (cache.has(user)) return cache.get(user);
const daten = await Promise.resolve({ name: user.name, geladen: Date.now() });
cache.set(user, daten);
return daten;
};
const alice = { name: 'Alice' };
await ladeNutzer(alice);
console.log(cache.has(alice), cache.has({ name: 'Alice' }));
Map kopieren (flache Kopie)
const original = new Map([['a', 1], ['b', 2]]);
const kopie = new Map(original);
kopie.set('c', 3);
console.log(original.size, kopie.size);
// Wichtig · Fallstricke
- Nur mit
newaufrufen:Map()ohnenewwirft einenTypeError. - Jedes Element des Iterables muss ein Objekt sein.
new Map([1, 2])wirft einenTypeError. Beinew Map(['ab'])werden die Indizes 0 und 1 gelesen, sodass'a' → 'b'entsteht. Das ist meist ungewollt. - Ein einfaches Objekt ist nicht iterierbar:
new Map({ a: 1 })schlägt fehl. Verwende stattdessennew Map(Object.entries(obj)). Für den Rückweg gibt esObject.fromEntries(map). - Schlüssel werden per SameValueZero verglichen:
NaNist gleichNaN, Objekte gelten nur bei identischer Referenz als gleich. - Das Kopieren per
new Map(andereMap)ist flach: Objekt-Werte werden nicht geklont. JSON.stringify(map)liefert{}. Zum Serialisieren wandle die Map vorher um, etwa mit[...map]oderObject.fromEntries(map).- Die Map hält starke Referenzen auf ihre Schlüssel und kann so Speicherlecks verursachen. Für Objekt-Metadaten ohne Lebenszeitbindung ist
WeakMapdie bessere Wahl. - Kompatibilität: Map wird in allen modernen Browsern und seit Node.js 0.12 unterstützt.