Hack Frontend Community

Как скопировать объект в JavaScript?

В JavaScript копирование объекта может быть:

  • Поверхностным (shallow copy) — копируются только верхнеуровневые свойства, вложенные объекты копируются по ссылке.
  • Глубоким (deep copy) — создаётся полная независимая копия, включая вложенные объекты и массивы.

Поверхностное копирование

Spread оператор "(...)"

const obj = { name: "Alice", age: 25 };
const copy = { ...obj };
  • Просто и читаемо
  • Только верхний уровень копируется

Object.assign()

const obj = { name: "Bob" };
const copy = Object.assign({}, obj);
  • Альтернатива spread
  • Тоже shallow copy

Глубокое копирование

JSON.parse(JSON.stringify(...))

const original = { user: { name: "Tom" } };
const deepCopy = JSON.parse(JSON.stringify(original));
  • Удобно и просто
  • Не копирует функции, undefined, Date, Map, Set и т.д.

structuredClone() (встроенный способ)

const deepCopy = structuredClone(obj);
  • Работает с большинством структур (в т.ч. Map, Set, Date, Blob)
  • Безопасно и эффективно
  • Требует поддержку браузером (поддерживается в современных)

Ручное копирование / библиотеки

lodash.cloneDeep

import cloneDeep from 'lodash/cloneDeep';

const deepCopy = cloneDeep(obj);
  • Подходит для сложных объектов
  • Проверенный и надёжный способ

Важно:

Простое копирование по ссылке (const copy = obj) не создаёт новый объект — это ссылка на тот же самый объект в памяти.