Что выведет console.log в приведённом фрагменте JavaScript

В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.

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

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

В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.

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

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

Условие

Определите, какое значение будет напечатано в консоль после выполнения следующего кода:

var a = {};
if (a === {}) {
  a = 123;
}
console.log(a);

Ответ

В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.

Переменная a ссылается на первый объект. В условии if создаётся второй объект, поэтому a === {} даёт false и присваивание a = 123 не выполняется.

Даже два пустых объекта не равны по ===. Если требуется проверить отсутствие собственных перечисляемых строковых ключей у обычного объекта, можно использовать Object.keys(a).length === 0; это не универсальное глубокое сравнение и не учитывает Symbol/неперечисляемые свойства.

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

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

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

Подробнее