PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Как сделать копию объекта?

Объекты и прототипы

Копию объекта делают поверхностно (spread, Object.assign) или глубоко (structuredClone, JSON, lodash), в зависимости от наличия вложенности.

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

Копирует верхний уровень; вложенные объекты остаются общими ссылками.

const copy1 = { ...original };
const copy2 = Object.assign({}, original);
const original = { user: { name: 'Ann' } };
const copy = { ...original };
copy.user.name = 'Bob';
original.user.name; // 'Bob' — вложенный объект общий!

Глубокая копия

structuredClone (современный дефолт)

const deep = structuredClone(original);

Копирует всю вложенность, Map, Set, Date, циклы. Не копирует функции.

JSON

const deep = JSON.parse(JSON.stringify(original));

Просто, но теряет функции, undefined, Symbol, ломается на циклах.

lodash.cloneDeep

Надёжно для сложных структур (внешняя зависимость).

Как выбирать

  • Плоский объект → spread (быстро).
  • Вложенность, современный браузер → structuredClone.
  • Простые данные без спецтипов → JSON.

Коротко для собеседования

Копия объекта: поверхностная ({...obj}, Object.assign — вложенные ссылки общие) или глубокая (structuredClone — лучший дефолт, JSON.parse(JSON.stringify) — с ограничениями, lodash.cloneDeep). Выбор — по вложенности.

Другие вопросы раздела