3.23M

Konstanty-i-Obuekty-v-JavaScript

1.

Константы и
Объекты в
JavaScript:
Почему можно менять содержимое Const?
Подготовил Головин Д.Н.

2.

Что такое const?
Обещание, которое нельзя нарушить
Ключевое слово const используется для объявления констант. На
первый взгляд, это кажется простым: константа — это значение,
которое никогда не меняется. В JavaScript const гарантирует, что
связь (или привязка) между именем переменной и её значением
останется неизменной.
Для примитивных типов (числа, строки, булевы
значения) это означает, что вы не можете переназначить
переменную на другое значение после инициализации.
Пример с примитивом

3.

Парадокс const и объектов
Когда константа кажется не такой уж и константой
Замена объекта
Изменение свойства объекта
Создаем константный объект и попробуем записать
Создаем константный объект и поменяем его свойство.
в него его же значение. И как ожидалось, получим ошибку.
И это работает!

4.

Объяснение: Связывание, а не значение
Аналогия с ККЭПом
В мире JavaScript объекты (как и массивы) являются ссылочными типами данных. Переменная const хранит не сам объект, а адрес в памяти,
где этот объект находится.
✅ Изменение содержимого
Это как отчислить студентов из колледжа по адресу (Ул. Зиповская 7). Вы меняете содержимое, но адрес (Ул.
Зиповская 7) остаётся прежним. const это не волнует.
❌ Переназначение
Это как пытаться заставить переменную const указывать на другой адрес (ул. Пушкина, дом Колотушкина). Даже
если наполнение оставить тем же (студенты, преподаватели и т.п.) для const это будет изменением объекта.

5.

Как сделать объект
действительно неизменным?
Вводим иммутабельность (Неизменяемость)
Если вам нужно, чтобы не только ссылка, но и само содержимое объекта было
защищено от изменений, вам потребуется дополнительный инструмент:
Object.freeze()
"Замораживает" объект. Нельзя добавлять, удалять или
изменять свойства.
Пример заморозки

6.

Ключевые выводы
Что нужно запомнить о const и объектах
1. const защищает ссылку
const гарантирует константность связи между именем переменной и адресом в памяти, на который она указывает.
2. Объекты — ссылочные типы
Переменная с объектом хранит не сам объект, а его адрес (ссылку). Мы можем менять "мебель в доме", но не можем менять "адрес дома".
3. Мутация разрешена
Изменение внутренних свойств объекта (мутация) через const-переменную возможно и не вызывает ошибок.
4. Переназначение запрещено
Попытка присвоить const-переменной совершенно новый объект (новую ссылку) всегда приводит к ошибке TypeError.
5. Для полной защиты используйте Object.freeze()
Для создания действительно неизменяемых (иммутабельных) объектов используйте Object.freeze() или практикуйте иммутабельные обновления через
копирование.
Спасибо за внимание!
English     Русский Rules