Для этого объекта подходит structuredClone: он скопирует и внешний объект, и вложенный address. Spread создаст только поверхностную копию и оставит address общим.
Получение независимой копии объекта
Для этого объекта подходит structuredClone: он скопирует и внешний объект, и вложенный address. Spread создаст только поверхностную копию и оставит address общим.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо создать копию объекта, которая не будет ссылаться на исходный объект.
let originalUser = {
name: 'Igor',
age: 19,
address: {
city: 'Petersburg'
}
}
Ответ
Для этого объекта подходит structuredClone: он скопирует и внешний объект, и вложенный address. Spread создаст только поверхностную копию и оставит address общим.
const copiedUser = structuredClone(originalUser);
copiedUser.address.city = 'Moscow';
console.log(originalUser.address.city); // Petersburg
Для известной небольшой структуры можно обойтись без универсального клонирования: { ...originalUser, address: { ...originalUser.address } }. structuredClone работает с поддерживаемыми данными и циклами, но не копирует функции, DOM-узлы или произвольное поведение классов. JSON round-trip для общего случая теряет типы и значения; здесь он не нужен.