Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WeakMap.prototype.getOrInsertComputed()

Baseline 2026
Neu verfügbar

Seit Februar 2026 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

Die Methode getOrInsertComputed() von WeakMap-Instanzen gibt den Wert zurück, der dem angegebenen Schlüssel in dieser WeakMap zugeordnet ist. Ist der Schlüssel nicht vorhanden, fügt sie einen neuen Eintrag mit dem Schlüssel und einem durch eine Callback-Funktion berechneten Standardwert ein und gibt den eingefügten Wert zurück.

Verwenden Sie diese Methode anstelle von WeakMap.prototype.getOrInsert(), wenn die Berechnung des Standardwerts aufwendig ist und Sie ihn nur dann berechnen möchten, wenn er tatsächlich benötigt wird.

Probieren Sie es aus

const alan = { name: "Alan" };
const map = new WeakMap([[alan, 35]]);
const defaultCreator = (obj) => `${obj.name}'s age is unknown`;

console.log(map.getOrInsertComputed(alan, defaultCreator));
// Expected output: 35

const brett = { name: "Brett" };
console.log(map.getOrInsertComputed(brett, defaultCreator));
// Expected output: "Brett's age is unknown"

Syntax

js
getOrInsertComputed(key, callback)

Parameter

key

Der Schlüssel des Elements, das aus dem Map-Objekt zurückgegeben werden soll. Er muss entweder ein Objekt oder ein nicht registriertes Symbol sein. Objektschlüssel werden anhand ihrer Referenz verglichen, nicht anhand ihres Werts.

callback

Eine Funktion, die den Wert zurückgibt, der eingefügt und zurückgegeben werden soll, wenn der Schlüssel im Map-Objekt noch nicht vorhanden ist. Die Funktion wird mit dem folgenden Argument aufgerufen:

key

Derselbe Schlüssel, der an getOrInsertComputed() übergeben wurde.

Rückgabewert

Der Wert, der dem angegebenen Schlüssel im WeakMap-Objekt zugeordnet ist. Wenn der Schlüssel nicht gefunden wird, wird das Ergebnis von callback(key) eingefügt und zurückgegeben.

Ausnahmen

TypeError

Wird in einem der folgenden Fälle ausgelöst:

Beispiele

Zwischenspeicherung

Bei der Zwischenspeicherung wird eine Zuordnung zwischen dem Parameter einer aufwendig zu berechnenden Funktion und ihrem Rückgabewert erstellt. So können spätere Aufrufe mit demselben Parameter den zwischengespeicherten Wert zurückgeben, statt ihn erneut zu berechnen. Wenn noch kein zwischengespeicherter Wert vorhanden ist, muss er berechnet und in den Cache eingefügt werden.

Hier verwenden wir eine WeakMap anstelle einer Map, damit die zwischengespeicherten Argumentwerte nicht verhindern, dass die entsprechenden Objekte von der Garbage Collection erfasst werden, wenn sie an anderer Stelle im Programm nicht mehr benötigt werden. Wenn Ihre zwischengespeicherte Funktion Argumente akzeptiert, die keine Objekte sind, können Sie stattdessen eine Map verwenden.

js
// Any expensive function you want to cache
function computeExpensiveValue(requestOptions) {
  // Imagine expensive computation, like fetching data or complex calculations
  console.log(`Fetching from ${requestOptions.url}`);
  return new Response("Fake response");
}

// A higher-order function that adds caching to any function
function withCache(fn) {
  const cache = new WeakMap();
  return (param) => cache.getOrInsertComputed(param, fn);
}

const computeWithCache = withCache(computeExpensiveValue);
const options = { url: "https://example.com/a", method: "GET" };
const value1 = computeWithCache(options); // Logs "Fetching from https://example.com/a"
const value2 = computeWithCache(options); // No log

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-weakmap.prototype.getorinsertcomputed

Browser-Kompatibilität

Siehe auch