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

Какие плюсы и минусы глубокого копирования через 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.

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