Будут выведены { item: 'bar' } и { item: 'foo' }. const запрещает переназначить переменную, но не запрещает менять свойства объекта, на который она указывает.
Влияние const и let на изменение полей объекта
Будут выведены { item: 'bar' } и { item: 'foo' }. const запрещает переназначить переменную, но не запрещает менять свойства объекта, на который она указывает.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой вывод появится в консоли после выполнения следующего фрагмента кода:
const constObj = {
item: "foo",
};
let letObj = {
item: "bar",
};
constObj.item = "bar";
letObj.item = "foo";
console.log(constObj, letObj);
Ответ
Будут выведены { item: 'bar' } и { item: 'foo' }. const запрещает переназначить переменную, но не запрещает менять свойства объекта, на который она указывает.
Оба присваивания свойствам допустимы. Ошибка возникла бы при constObj = другойОбъект, а не при constObj.item = .... let дополнительно разрешает заменить саму ссылку. Для запрета изменения верхнеуровневых свойств применяется Object.freeze, но он не делает вложенные объекты автоматически неизменяемыми.