Типы данных в JavaScript

Типы данных в основном определяют, какие данные могут храниться и обрабатываться в программе.

В JavaScript существует шесть основных типов данных, которые можно разделить на три основные категории: примитивные (или основные), составные (или ссылочные), и специальные типы данных. String, Number и Boolean являются примитивными типами данных. Объект, Массив и Функция (все типы объектов) являются составными типами данных. В то время как Undefined и Null являются специальными типами данных.

Копировать по значению

При копировании по значению данные, которые хранятся в переменной, передаются в другую переменную. Обе переменные ссылаются на две разные области памяти.

В приведенном выше примере для переменной named(copied_variable) данные, которые присутствуют в a, копируются не value . Даже если содержимое скопированной переменной изменено, исходное значение переменной, из которой она скопирована, остается прежним.

Копировать по ссылке

Для составных типов данных объекты копируются по ссылке. Фактическая переменная и копируемая переменная относятся к одной и той же ячейке памяти. SO изменение данных скопированной переменной также приведет к изменению данных исходной переменной.

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

Как скопировать составной тип данных по значению?

Есть 3 способа копирования по значению для составных типов данных.

  1. Использование оператора спреда (...)
  2. Использование метода Object.assign()
  3. Использование методов JSON.stringify() и JSON.parse()

1. Использование спреда

Оператор Spread позволяет итерируемому объекту расширяться в местах, где ожидается 0+ аргументов. Он в основном используется в массиве переменных, где ожидается более 1 значения. Это дает нам привилегию получить список параметров из массива. Использование распространения будет клонировать ваш объект. Обратите внимание, что это будет неглубокая копия.

В приведенном выше примере, когда скопированное значение переменной изменяется, но исходное значение переменной остается прежним.

2. Использование Object.assign()

Метод Object.assign() копирует все перечисляемые собственные свойства из одного или нескольких исходных объектов в целевой объект. Он возвращает целевой объект. Обратите внимание, что это будет неглубокая копия.

Обратите внимание на пустой [] в качестве первого аргумента, это гарантирует, что вы не измените исходный объект.

3. Использование JSON.parse() и JSON.stringify()

Объект JSON, доступный во всех современных браузерах, имеет два полезных метода для работы с содержимым в формате JSON: синтаксический анализ и преобразование в строку. JSON.parse() берет строку JSON и преобразует ее в объект JavaScript. JSON.stringify() берет объект JavaScript и преобразует его в строку JSON. Использование JSON.parse() и JSON.stringify() для копирования выполняет глубокое копирование.

Глубокая копия — это истинная копия для вложенных объектов. Неглубокое копирование копирует только ссылки в случае вложенных объектов.