Этот вопрос проверяет понимание того, как копируются объекты в JavaScript и чем отличается копирование ссылок от копирования значений.
Поверхностное копирование — это копирование объекта, при котором копируются только его свойства первого уровня.
Если свойство содержит вложенный объект, копируется не сам объект, а ссылка на него.
В результате исходный и скопированный объект частично разделяют одни и те же данные.
Изменения во вложенных объектах будут видны в обеих копиях.
Поверхностное копирование часто используется в JavaScript, но может приводить к неожиданным эффектам, если не понимать его ограничения.
Поверхностное копирование (shallow copy) — это копирование, при котором:
создаётся новый объект
копируются только значения свойств верхнего уровня
вложенные объекты и массивы копируются по ссылке
На практике поверхностное копирование создаётся с помощью:
Object.assign
оператора расширения ...
методов массивов вроде slice
const original = {
name: 'Alex',
address: { city: 'London' }
};
const copy = { ...original };
После копирования:
original !== copy
original.address === copy.address
Это означает, что вложенный объект общий для обеих структур.
Поверхностное копирование подходит, если:
объект плоский
вложенные структуры не изменяются
используется иммутабельный подход (создание новых вложенных объектов)
Поверхностное копирование создаёт новую оболочку объекта, но не дублирует вложенные структуры. Это быстро, но требует осторожности