В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.
Что выведет console.log в приведённом фрагменте JavaScript
В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какое значение будет напечатано в консоль после выполнения следующего кода:
var a = {};
if (a === {}) {
a = 123;
}
console.log(a);
Ответ
В консоль попадёт исходный пустой объект {}, а не 123. Каждый литерал {} создаёт новый объект, и строгое сравнение проверяет их идентичность, а не одинаковое содержимое.
Переменная a ссылается на первый объект. В условии if создаётся второй объект, поэтому a === {} даёт false и присваивание a = 123 не выполняется.
Даже два пустых объекта не равны по ===. Если требуется проверить отсутствие собственных перечисляемых строковых ключей у обычного объекта, можно использовать Object.keys(a).length === 0; это не универсальное глубокое сравнение и не учитывает Symbol/неперечисляемые свойства.