TypeError: WeakSet-Schlüssel/WeakMap-Wert 'x' muss ein Objekt oder ein nicht registriertes Symbol sein

Der JavaScript-Fehler "WeakSet-Schlüssel (oder WeakMap-Wert) 'x' muss ein Objekt oder ein nicht registriertes Symbol sein" tritt auf, wenn ein Wert eines ungültigen Typs als Schlüssel in einem WeakSet oder als Wert in einer WeakMap verwendet wird.

Meldung

TypeError: Invalid value used as weak map key (V8-based)
TypeError: WeakMap key 1 must be an object or an unregistered symbol (Firefox)
TypeError: WeakMap keys must be objects or non-registered symbols (Safari)

TypeError: Invalid value used in weak set (V8-based)
TypeError: WeakSet value 1 must be an object or an unregistered symbol (Firefox)
TypeError: WeakSet values must be objects or non-registered symbols (Safari)

Fehlertyp

Was ist schiefgelaufen?

WeakSet und WeakMap erfordern, dass die Schlüssel Müll sammelbar sind. Nur Objekte und nicht registrierte Symbole (d.h. Symbole, die nicht von Symbol.for() zurückgegeben werden) sind gültig. Für mehr Informationen siehe Speicherverwaltung. Wenn Sie Schlüssel verwenden möchten, die Zeichenfolgen, Zahlen oder andere primitive Werte sind, sollten Sie sie stattdessen in einem regulären Set oder Map speichern.

Beispiele

Ungültige Fälle

js
new WeakSet().add(1); // TypeError
new WeakMap().set(1, {}); // TypeError
new WeakSet([1]); // TypeError
new WeakMap([[1, {}]]); // TypeError

Gültige Fälle

js
new WeakSet().add({}); // OK
new WeakMap().set({}, 1); // OK

new Set([1]); // OK
new Map([[1, {}]]); // OK

Siehe auch