Привет, мир 🌏 !!! В моей предыдущей статье я объяснил 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 мы можем использовать несколько самых популярных библиотек, чтобы решить проблему изменчивости.
- Lodash
мы можем использовать методlodash's
cloneDeep для создания копий нашего объекта.
Если размер lodash является проблемой, у нас есть несколько способов решить эту проблему:
Импортировать cloneDeep
, как это (если вы используете только метод cloneDeep
)
3. just-clone - Библиотека нулевых зависимостей - размер ~ 1 КБ
3. Immutable.JS - разработан разработчиками Facebook.
Итак, это все о неизменяемости в JavaScript. Надеюсь, у вас есть представление о неизменности. Вы можете плавать в океане JavaScript, чтобы глубже понять эту концепцию.