Почему с помощью первого фрагмента можно изменить объект, объявленный с помощью const, а с помощью второго нет?

97
29 сентября 2021, 05:50

**Первый фрагмент** 
 
const user = { 
  name: "John" 
}; 
 
// сработает без проблем. 
user.name = "Pete"; 
 
 
**Второй фрагмент** 
 
const user = { 
  name: "John" 
}; 
 
// Ошибка (нельзя переопределять константу user) 
user = { 
  name: "Pete" 
};

Хотя user.name = "Pete"; и user = { name: "Pete" }; оба меняют значение свойства. Почему так? Я правильно думаю, что первый фрагмент работает правильно, так как в нем неявно меняется значение свойства, то есть по ссылке меняется. А во втором фрагменте явно меняется, то есть прямо в самом объекте пытается менять значение свойства и поэтому выдает ошибку. Так или нет? Если нет, то почему оно так работает?

Answer 1

Разжую комментарий @Akina:

Вынуть из коробки носки и положить туда ботинки - запросто. А вот переделать её в ящик с ботинками затруднительно

const работает не так, как может показаться. Если вы думаете, что создав переменную через const вы полностью сделаете ее неизменяемой, то это не так.

Если говорить просто, то любая переменная хранится в какой-то ячейке памяти. Так вот, const говорит, что положив что-то в ячейку памяти, мы уже не сможем поменять это значение.

Поэтому во втором случае у вас появляется ошибка, так как вы пытаетесь положить в ячейку новое значение.
В первом же случае, ошибки нет, так как значение в ячейке не меняется, меняется св-во этого значение, которое лежит в другом месте ( и св-ва объекта это уже не const )

READ ALSO
Каким образом мы получаем переменную вне функции?

Каким образом мы получаем переменную вне функции?

В данном коде, по клику на кнопку мы вытягиваем массив объектов из сервераЗатем добавляем эти объекты в разметку

170
Symfony: глобальный импорт bootstrap

Symfony: глобальный импорт bootstrap

Мне необходимо подключить bootstrap 4 таким образом, чтобы он был виден во всех подключаемых javascript файлахСобственно, есть файл app

101
Код не возвращает данные из JSON файла

Код не возвращает данные из JSON файла

Проходя курс по JS столкнулся с проблемой во время использования Promise вместо обычных callback функций

84
event.target.value - взять одно значение из двух

event.target.value - взять одно значение из двух

Возникла необходимость добавить выпадающий список с двумя значениями - условно контактом и его ID, одной строкойВыбранное значение обрабатывается...

99