Копирование объектов
Поверхностное и глубокое клонирование объектов в JS.
Зачем нужно
Объекты передаются по ссылке. Чтобы изменить копию без влияния на оригинал, нужно клонирование. Shallow copy копирует только первый уровень, deep copy — все вложенные.
Где используется
- Иммутабельное обновление state (React, Redux)
- Создание снимков данных
- Безопасная передача данных между модулями
Code
// Shallow copy
const copy1 = { ...original };
const copy2 = Object.assign({}, original);
const arrCopy = [...array];
// Проблема shallow copy
const obj = { a: 1, nested: { b: 2 } };
const shallow = { ...obj };
shallow.nested.b = 99; // original.nested.b тоже 99!
// Deep copy — structuredClone (современный способ)
const deep = structuredClone(obj);
deep.nested.b = 99; // original не затронут
// JSON trick (не копирует функции, Date, undefined)
const jsonCopy = JSON.parse(JSON.stringify(obj));
// Массивы
const deepArr = structuredClone([{ a: 1 }, { b: 2 }]);
// structuredClone НЕ копирует: функции, DOM-элементы, Error, Symbol
// Для таких случаев — рекурсивная функция или lodash.cloneDeep