Типы данных в JavaScript
Типы данных в основном определяют, какие данные могут храниться и обрабатываться в программе.
В JavaScript существует шесть основных типов данных, которые можно разделить на три основные категории: примитивные (или основные), составные (или ссылочные), и специальные типы данных. String, Number и Boolean являются примитивными типами данных. Объект, Массив и Функция (все типы объектов) являются составными типами данных. В то время как Undefined и Null являются специальными типами данных.
Копировать по значению
При копировании по значению данные, которые хранятся в переменной, передаются в другую переменную. Обе переменные ссылаются на две разные области памяти.
В приведенном выше примере для переменной named(copied_variable) данные, которые присутствуют в a, копируются не value . Даже если содержимое скопированной переменной изменено, исходное значение переменной, из которой она скопирована, остается прежним.
Копировать по ссылке
Для составных типов данных объекты копируются по ссылке. Фактическая переменная и копируемая переменная относятся к одной и той же ячейке памяти. SO изменение данных скопированной переменной также приведет к изменению данных исходной переменной.
В приведенном выше примере мы могли заметить, что изменение значения скопированной переменной приводит к изменению исходной переменной, из которой она копируется, поскольку они обе ссылаются на одну и ту же ячейку памяти.
Как скопировать составной тип данных по значению?
Есть 3 способа копирования по значению для составных типов данных.
- Использование оператора спреда (
...
) - Использование метода
Object.assign()
- Использование методов
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() для копирования выполняет глубокое копирование.
Глубокая копия — это истинная копия для вложенных объектов. Неглубокое копирование копирует только ссылки в случае вложенных объектов.