Сравни способы копирования объектов и объясни, когда выбирать каждый вариант.
Объекты и прототипы
Копировать объекты можно поверхностно (spread, Object.assign) или глубоко (structuredClone, JSON, lodash). Выбор зависит от наличия вложенности и требований к производительности.
Поверхностные способы
Копируют только верхний уровень; вложенные объекты остаются общими ссылками.
const shallow1 = { ...obj };
const shallow2 = Object.assign({}, obj);
const arrCopy = arr.slice();Применение: плоские объекты, иммутабельное обновление верхнего уровня (React-состояние).
Глубокие способы
structuredClone (рекомендуемый)
const deep = structuredClone(obj);Копирует вложенность, Map, Set, Date, циклы. Не копирует функции.
JSON
const deep = JSON.parse(JSON.stringify(obj));Быстро, но теряет функции, undefined, Symbol, ломается на циклах, Date → строка.
lodash.cloneDeep
Надёжно для сложных структур, но внешняя зависимость.
Как выбирать
- Плоский объект → spread/assign (быстро).
- Вложенность, современный браузер → structuredClone.
- Простые данные без функций/дат → JSON (осторожно).
- Сложные структуры и legacy → lodash.
Коротко для собеседования
Поверхностно — {...obj}, Object.assign (общие вложенные ссылки). Глубоко — structuredClone (лучший дефолт), JSON.parse(JSON.stringify) (с ограничениями), lodash.cloneDeep. Выбор — по вложенности и типам данных.