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