Привет, мир 🌏 !!! В моей предыдущей статье я объяснил 3 способа не копировать объекты JavaScript. В этой статье я объясню, как мы можем копировать объекты в JavaScript, и объясню концепцию неизменности.

Mutable = можно изменить
Immutable = нельзя изменить

Итак, сначала давайте разберемся, почему эта копия сложна в JavaScript?
Короткий ответ заключается в том, что JavaScript - изменчивый язык.

Объяснение:
В JavaScript только примитивные значения (строки, числа, BigInts, логические. Undefined, null) являются изменяемыми. Мы не можем изменить их.

Но подождите, рассмотрите следующий код:

Разве мы не меняем a и b? Нет, это не так. В приведенном выше коде a и b не являются значениями. Это переменные.

Переменные не являются значениями. Переменная указывает на значения.

Итак, в приведенном выше коде мы просто меняем ссылку variable, а не значение.
Для большей ясности рассмотрим этот код.

Здесь мы пытаемся изменить значения a и b. Действие кода зависит от того, включен ли у нас strict mode или нет.
Если включен strict mode, мы получим ошибку. Иначе эффект кода - ничто.

Теперь мы поняли, что примитивы неизменяемы. Теперь посмотрим, что насчет объектов и массивов.

В JavaScript объекты и массивы изменяемы. Это означает, что мы можем изменить их после создания. Чтобы понять это:

В этом коде мы можем изменять объект и массивы. Это может привести к несогласованности данных и может вызвать множество ошибок в коде. Потому что мы можем передать объект функции и, возможно, эта функция неосознанно изменяет переданный объект.

Итак, теперь мы ясно знаем о проблемах, теперь давайте обсудим хорошие стороны неизменяемости и способы ее достижения.

Неизменяемость помогает нам:
1. Предоставляя нам более детальный контроль над нашими данными.
2. Мы можем выполнять отмену / повтор и откат.
3. Производительность нашего приложения увеличивается, поскольку сравнение значений занимает меньше времени. время по сравнению со ссылками.

Теперь давайте посмотрим, как добиться неизменности в JavaScript.

К сожалению, до сих пор нет собственного способа сделать это. Есть одна экспериментальная функция под названием Структурированное клонирование, доступная в V8, но это только для узла.

В JavaScript мы можем использовать несколько самых популярных библиотек, чтобы решить проблему изменчивости.

  1. Lodash
    мы можем использовать метод lodash's cloneDeep для создания копий нашего объекта.

Если размер lodash является проблемой, у нас есть несколько способов решить эту проблему:
Импортировать cloneDeep , как это (если вы используете только метод cloneDeep)

2. lodash.cloneDeep

3. just-clone - Библиотека нулевых зависимостей - размер ~ 1 КБ

3. Immutable.JS - разработан разработчиками Facebook.

Итак, это все о неизменяемости в JavaScript. Надеюсь, у вас есть представление о неизменности. Вы можете плавать в океане JavaScript, чтобы глубже понять эту концепцию.

Ура !!!
🍻