Вывод: 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 — разные объекты. Обычный объект поддерживает строковые и символьные ключи, а не произвольные объекты как самостоятельные ключи. Поведение преобразования может отличаться для объектов с собственными методами конверсии.