Копирование объектов

Поверхностное и глубокое клонирование объектов в 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

Связанные темы

Ресурсы