Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: shallow, copy, deep

В чем разница между Object.assign и копированием через JSON.stringify / JSON.parse?

Вопрос проверяет понимание различных способов копирования объектов и их ограничений.

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

Object.assign делает поверхностное копирование объекта.
JSON.stringify / JSON.parse выполняет глубокое копирование, но с серьёзными ограничениями.
При использовании JSON теряются функции, undefined, Symbol и специальные типы данных.
Также JSON не умеет работать с циклическими ссылками.

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

Оба подхода используются для копирования объектов, но работают принципиально по-разному.

Object.assign

Этот метод копирует свойства из одного объекта в другой:

  • копирование происходит только на первом уровне

  • вложенные объекты копируются по ссылке

const original = { a: 1, nested: { b: 2 } };
const copy = Object.assign({}, original);

copy.nested.b = 100;
// original.nested.b тоже станет 100

JSON.stringify / JSON.parse

Этот способ работает иначе:

  1. Объект превращается в строку JSON

  2. Затем строка парсится обратно в объект

const copy = JSON.parse(JSON.stringify(original));

Особенности:

  • создаётся новый объект на всех уровнях

  • это похоже на глубокое копирование

  • но поддерживаются только JSON-совместимые данные

Ключевые отличия подходов

Перед использованием важно учитывать:

  • Object.assign быстрее и безопаснее для простых структур

  • JSON-подход ломается на сложных типах данных

  • JSON не поддерживает циклические ссылки

Краткий вывод

Object.assign — поверхностное копирование без сюрпризов.
JSON-копирование — псевдоглубокое, но с потерей данных и ограничениями.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

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

#shallow

#copy

#deep

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