Все истории

🔒 Объявил объект через const, но он всё равно изменился. Почему?

Копия публикации из архива канала. Дата и текст сохранены.

Очень частая путаница в JavaScript:
const user = {
name: "Кодик",
level: 1
};

user.level = 2;

console.log(user);

И внезапно всё работает:
{ name: "Кодик", level: 2 }

Новичок в этот момент закономерно думает:
«А const тогда вообще что запрещает?» 😄

Вот что важно: const запрещает переприсвоить переменную, но не делает объект неизменяемым.

То есть так нельзя:
user = {
name: "Другой Кодик"
};

так — можно:
user.level = 2;
user.name = "Супер Кодик";

Почему?
Потому что переменная user хранит ссылку на объект.

const говорит:
ссылка должна остаться той же
Но сам объект по этой ссылке менять никто не запрещал.

Если очень хочется защитить объект от изменений, можно использовать:
Object.freeze(user);
Но и тут есть нюансы: заморозка не всегда работает глубоко для вложенных объектов.

📌 Поэтому простое правило:
const = нельзя заменить значение переменной.

Но если внутри лежит объект или массив — их содержимое менять можно.

🔥 У кого тоже был момент: «Так const же значит constant, почему оно меняется?!» 😄