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

👨‍💻 Frontend Developer 🟠 Может встретиться 🎚️ Средний
#JavaScript #Объекты #База JS

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

Ключевое слово const защищает только переменную, а не содержимое объекта. Оно запрещает переназначить переменную на другой объект, но не запрещает изменять свойства самого объекта. Это разные операции.


Полный ответ

Многие путаются, думая, что const делает объект неизменяемым. На самом деле const работает по-другому.

Что делает const

Const защищает переменную, а не объект:

const user = { name: 'Иван' };
user.name = 'Петр'; // Можно — изменяем свойства
user = {}; // Нельзя — ошибка! Нельзя переназначить переменную

Разница между изменением и переназначением

Изменение свойств

const obj = { a: 1 };
obj.a = 2; // Изменение — можно
obj.b = 3; // Добавление — можно

Переназначение переменной

const obj = { a: 1 };
obj = { b: 2 }; // Переназначение — нельзя! Ошибка

Простые примеры

Можно изменять

const user = { name: 'Иван', age: 25 };
 
// Все эти операции разрешены
user.name = 'Петр';
user.age = 30;
user.city = 'Москва';
delete user.age;

Нельзя переназначить

const user = { name: 'Иван' };
 
// Это вызовет ошибку
user = { name: 'Петр' }; // TypeError!

Важные особенности

1. Защита только переменной

const arr = [1, 2, 3];
arr.push(4); // Можно — изменяем массив
arr = []; // Нельзя — ошибка!

2. Ссылка не меняется

const obj = { a: 1 };
// obj всегда указывает на один и тот же объект в памяти

Когда это полезно

Безопасная работа с данными

const config = { theme: 'dark' };
 
// Можно обновлять настройки
config.theme = 'light';
config.lang = 'ru';
 
// Но нельзя случайно перезаписать весь конфиг
// config = {}; // Это защитит от ошибки

Работа с функциями

const api = { 
  baseUrl: 'https://api.example.com' 
};
 
// Можно добавлять методы
api.getUsers = function() { /* логика */ };
 
// Но нельзя заменить весь api
// api = {}; // Ошибка!

Частые ошибки

1. Ожидание неизменяемости

// ❌ Думаем, что объект заморожен
const obj = { a: 1 };
obj.a = 2; // Сработает!
console.log(obj.a); // 2
 
// ✅ Правильное понимание
console.log(obj.a); // 2 — объект изменился

2. Попытка переназначения

// ❌ Ошибка — нельзя переназначить const
const obj = { a: 1 };
obj = { b: 2 }; // TypeError!
 
// ✅ Правильный способ изменить содержимое
obj.a = 2; // Изменяем свойства

Простые правила

  1. const — защищает переменную, не объект
  2. Изменение — можно менять свойства объекта
  3. Переназначение — нельзя менять саму переменную
  4. Ссылка — переменная всегда указывает на один объект
  5. Безопасность — защищает от случайной замены объекта

Понимание работы const помогает писать более предсказуемый код и избегать ошибок с переназначением переменных.


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪