Вывод будет undefined и 'b'. Оба объекта-ключа преобразуются в одинаковую строку '[object Object]', поэтому вторая запись перезаписывает первую.
Определить вывод console.log в приведённом JavaScript‑фрагменте
Вывод будет undefined и 'b'. Оба объекта-ключа преобразуются в одинаковую строку '[object Object]', поэтому вторая запись перезаписывает первую.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно выяснить, какой результат будет напечатан в консоль при выполнении следующего кода:
const a = { a: "a" };
const b = { b: "b" };
const c = {};
c[a] = a;
c[b] = b;
console.log(c[a].a, c[b].b);
Ответ
Вывод будет undefined и 'b'. Оба объекта-ключа преобразуются в одинаковую строку '[object Object]', поэтому вторая запись перезаписывает первую.
После c[a] = a существует одно свойство со строковым ключом. Операция c[b] = b использует тот же ключ и сохраняет объект b. Поэтому c[a] и c[b] теперь возвращают один и тот же b.
У b нет свойства a — получается undefined; свойство b равно строке 'b'. Чтобы разные объекты оставались разными ключами по идентичности, используйте Map и его set/get вместо обычного индексирования объекта.