Spec-Zone.ru › JavaScript

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)

Тип ошибки

TypeError

Что пошло не так?

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

Смотрите также

  • Управление памятью
  • WeakSet
  • WeakMap
  • Set
  • Map

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API