TypeError: ключ WeakSet/значение WeakMap 'x' должен быть объектом или незарегистрированным символом
Исключение JavaScript "WeakSet key (or WeakMap value) 'x' must be an object or an unregistered symbol" возникает, когда значение недопустимого типа используется в качестве ключа в WeakSet или в качестве значения в WeakMap.
Сообщение
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)
Тип ошибки
Что пошло не так?
WeakSet и WeakMap требуют, чтобы ключи были подлежащими сборке мусора. Допустимыми являются только объекты и незарегистрированные символы (то есть, символы, не возвращаемые Symbol.for()). Дополнительную информацию см. в разделе Управление памятью. Если вы хотите добавить ключи, являющиеся строками, числами или другими примитивными значениями, вам следует хранить их в обычном Set или Map вместо этого.
Примеры
Недопустимые случаи
new WeakSet().add(1); // TypeError
new WeakMap().set(1, {}); // TypeError
new WeakSet([1]); // TypeError
new WeakMap([[1, {}]]); // TypeError
Допустимые случаи
new WeakSet().add({}); // OK
new WeakMap().set({}, 1); // OK
new Set([1]); // OK
new Map([[1, {}]]); // OK
Смотрите также
© 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/Errors/Key_not_weakly_held