Как клонировать объект в 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. Выбор — по вложенности объекта.