Почему объекты, используемые как ключи обычного объекта, преобразуются в строку "[object Object]"? Происходит ли строковое приведение и для других ключей, например числа 7?

Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".

Короткий ответ

Что ответить на собеседовании

Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".

Подробный разбор

Ответ с пояснениями

Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".

Поэтому два разных объекта-ключа могут попасть в одно строковое свойство и перезаписать значение. Настроенный Symbol.toPrimitive или toString способен изменить строку, но не создаёт идентичность объектного ключа. Для ключей-объектов используйте Map: там сравнивается сама ссылка. Symbol остаётся символом и не приводится к строке ключа.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее