Какие плюсы и минусы глубокого копирования через JSON.stringify?
Объекты и прототипы
Глубокое копирование через `JSON.parse(JSON.stringify(obj))` просто и не требует зависимостей, но теряет функции, `undefined`, `Symbol`, ломается на циклах и портит даты.
Плюсы
- Просто и без библиотек — одна строка.
- Копирует всю вложенность, даёт полностью независимый объект.
- Подходит для простых данных: вложенные объекты/массивы из примитивов (типичный JSON-ответ API).
const deep = JSON.parse(JSON.stringify(original));Минусы
- Функции и `undefined` — теряются (пропадают из результата).
- `Symbol` — теряется.
- `Date` — превращается в строку (не восстанавливается в объект
Date). - `Map`, `Set` — становятся пустыми объектами
{}. - Циклические ссылки — выбрасывает
TypeError. - `NaN`, `Infinity` — становятся
null. - Производительность — сериализация+парсинг медленнее специализированных решений на больших объектах.
- `BigInt` — выбрасывает ошибку.
Когда использовать
Только для «чистых» данных без функций, дат, спецтипов и циклов. Иначе — structuredClone (современный дефолт) или lodash.cloneDeep.
Коротко для собеседования
JSON.parse(JSON.stringify()) — простой способ глубокой копии для чистых данных, но теряет функции, undefined, Symbol, Map/Set, портит Date и падает на циклах. Для сложных структур — structuredClone или lodash.cloneDeep.