Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: deep copy, JSON.parse, JSON.stringify, object cloning, limitations

Можно ли глубоко скопировать объект через JSON.parse(JSON.stringify(...))? Какие у этого способа ограничения?

Вопрос проверяет понимание ограничений метода глубокого копирования объектов через JSON.parse(JSON.stringify(...)).

Короткий ответ

Да, можно, но с ограничениями. Метод не копирует функции, undefined, Symbol, специальные значения NaN, Infinity, -Infinity (преобразуются в null), а также не работает с циклическими ссылками и некоторыми встроенными объектами (Date становится строкой, Map/Set — пустыми объектами).

Длинный ответ

Как работает JSON.parse(JSON.stringify(...))

Этот способ глубокого копирования использует сериализацию объекта в JSON-строку и последующее её парсинг в новый объект. Он прост в использовании и подходит для большинства простых структур данных.

Ограничения метода

  • Функции и undefined: Свойства, содержащие функции или undefined, теряются.
  • Symbol: Свойства с ключами-символами игнорируются.
  • Специальные числовые значения: NaN, Infinity, -Infinity преобразуются в null.
  • Циклические ссылки: Выбрасывается ошибка TypeError.
  • Встроенные объекты: Date становится строкой, Map, Set, RegExp, Error, Blob и другие преобразуются в пустые объекты.

Пример кода

const original = {
  name: 'Alice',
  age: 30,
  nested: { arr: [1, 2, NaN] },
  method: () => console.log('hi'),
  date: new Date(),
  undef: undefined
};

const copy = JSON.parse(JSON.stringify(original));
console.log(copy);
// { name: 'Alice', age: 30, nested: { arr: [1, 2, null] }, date: '2023-...', undef: undefined }

Вывод

Метод подходит для простых объектов без функций, циклических ссылок и специальных типов. Для более сложных случаев используйте библиотеки (lodash.cloneDeep) или рекурсивную реализацию с проверками.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#deep copy

#JSON.parse

#JSON.stringify

#object cloning

#limitations

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию