> Что такое поверхностное и глубокое копирование объектов в JavaScript (JavaScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: ДиджиталСектор, ООО Премиум ИТ Солюшен, EvApps, IT-One, Софт Медиа Групп, Библио-Глобус, EPAM, Сфера, EdenAI, SmartWay
Стек: JavaScript
> Пример ответа
Поверхностное (shallow) и глубокое (deep) копирование - это два подхода к созданию копий объектов, которые различаются по глубине копирования вложенных структур.
Поверхностное копирование создает новый объект, но копирует только ссылки на вложенные объекты, а не сами объекты. Изменение вложенного объекта в копии повлияет на оригинал. Примеры: Object.assign(), оператор spread ({...obj}), Array.prototype.slice().
Пример:
JAVASCRIPTconst original = { a: 1, b: { c: 2 } };const shallowCopy = { ...original };shallowCopy.b.c = 42;console.log(original.b.c); // 42 - оригинал изменился
Глубокое копирование рекурсивно копирует все уровни вложенности, создавая полностью независимые объекты. Изменения в копии не затрагивают оригинал. Способы:
JSON.parse(JSON.stringify(obj))- простой, но теряет функции,undefined,Symbol, циклические ссылки.structuredClone()- современный нативный метод (поддержка с 2022 года), работает с большинством типов, включаяDate,Map,Set.- Ручная рекурсивная функция или библиотеки (Lodash
_.cloneDeep).
Пример с structuredClone:
JAVASCRIPTconst original = { a: 1, b: { c: 2 } };const deepCopy = structuredClone(original);deepCopy.b.c = 42;console.log(original.b.c); // 2 - оригинал не изменился
Выбор зависит от задачи: для простых объектов без вложенности достаточно поверхностного копирования, для сложных структур с вложенными объектами - глубокое.
> Похожие задачи по frontend
Как вы писали модульные и интеграционные тесты
Был ли опыт работы с нативным JavaScript и event listeners?
Использовали ли кастомные парсеры для преобразования JSON в объекты на уровне бизнес-логики
Как работает прототипное наследование в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью