Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".
Почему объекты, используемые как ключи обычного объекта, преобразуются в строку "[object Object]"? Происходит ли строковое приведение и для других ключей, например числа 7?
Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Ключ обычного объекта должен быть строкой или Symbol. Число 7 превращается в "7", а обычный объект при стандартном приведении — в "[object Object]".
Поэтому два разных объекта-ключа могут попасть в одно строковое свойство и перезаписать значение. Настроенный Symbol.toPrimitive или toString способен изменить строку, но не создаёт идентичность объектного ключа. Для ключей-объектов используйте Map: там сравнивается сама ссылка. Symbol остаётся символом и не приводится к строке ключа.