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

Как клонировать объект в JavaScript?

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

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

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

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

const clone1 = { ...original };
const clone2 = Object.assign({}, original);
const original = { user: { name: 'Ann' } };
const clone = { ...original };
clone.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. Выбор — по вложенности объекта.

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