WeakMap.prototype.getOrInsert()
Baseline Newly available
This feature works across the latest devices and browser versions. This feature might not work in older devices or browser versions. It's been available across browsers since February 2026.
The getOrInsert() method of WeakMap instances returns the value corresponding to the specified key in this WeakMap. If the key is not present, it inserts a new entry with the key and a given default value, and returns the inserted value.
If the computation of the default value is expensive, consider using WeakMap.prototype.getOrInsertComputed() instead, which takes a callback to compute the default value only if it's actually needed.
Try it
const map = new WeakMap([[window, "foo"]]);
console.log(map.getOrInsert(window, "default"));
// Expected output: "foo"
console.log(map.getOrInsert({}, "default"));
// Expected output: "default"
Syntax
getOrInsert(key, defaultValue)
Parameters
-
key - The key of the value to return from the
WeakMapobject. Must be either an object or a non-registered symbol. Object keys are compared by reference, not by value. -
defaultValue - The value to insert and return if the key is not already present in the
WeakMapobject.
Return value
The value associated with the specified key in the WeakMap object. If the key can't be found, defaultValue is inserted and returned.
Exceptions
-
TypeError - Thrown if
keyis not an object or a non-registered symbol.
Examples
Using getOrInsert()
const wm = new WeakMap();
const obj = {};
console.log(wm.get(obj)); // undefined
console.log(wm.getOrInsert(obj, "default")); // "default"
console.log(wm.get(obj)); // "default"
console.log(wm.getOrInsert(obj, "another default")); // "default"
Specifications
Browser compatibility
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
getOrInsert |
145 |
145 |
144 |
129 |
26.2 |
145 |
144 |
96 |
26.2 |
No |
145 |
26.2 |
1.2.20 |
2.6.7 |
26.0.0 |
See also
- Polyfill of
WeakMap.prototype.getOrInsertincore-js - es-shims polyfill of
WeakMap.prototype.getOrInsert WeakMapWeakMap.prototype.get()WeakMap.prototype.set()WeakMap.prototype.has()WeakMap.prototype.getOrInsertComputed()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/getOrInsert