Почему объекты как ключи обычного объекта совпадают

Вывод: 20 и 1. Оба обычных объекта преобразуются в одинаковый строковый ключ [object Object]. Для ключей-объектов по идентичности используйте Map.

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

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

Вывод: 20 и 1. Оба обычных объекта преобразуются в одинаковый строковый ключ [object Object]. Для ключей-объектов по идентичности используйте Map.

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

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

Условие

Определите вывод:

const a = {}, b = {}, c = {};
a[b] = 10;
a[c] = 20;
console.log(a[b]);
console.log(Object.keys(a).length);

Чем заменить a для ключей по идентичности?

Ответ

Вывод: 20 и 1. Оба обычных объекта преобразуются в одинаковый строковый ключ [object Object]. Для ключей-объектов по идентичности используйте Map.

В Map выражения map.set(b, 10) и map.set(c, 20) сохранят две разные записи, поскольку b и c — разные объекты. Обычный объект поддерживает строковые и символьные ключи, а не произвольные объекты как самостоятельные ключи. Поведение преобразования может отличаться для объектов с собственными методами конверсии.

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

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

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

Подробнее