Оба console.log покажут { name: 'Андрей' }. copyObj не является копией объекта: присваивание сохранило ту же ссылку, поэтому поле изменилось для обеих переменных.
Что отобразится в консоль после изменения свойства через копию объекта
Оба console.log покажут { name: 'Андрей' }. copyObj не является копией объекта: присваивание сохранило ту же ссылку, поэтому поле изменилось для обеих переменных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие значения будут напечатаны в консоль после выполнения приведённого кода. Учтите, что переменная copyObj ссылается на тот же объект, что и sourceObj, поэтому изменение свойства через одну переменную отразится на другой.
const sourceObj = {
name: 'Максим'
}
const copyObj = sourceObj
copyObj.name = 'Андрей'
console.log(sourceObj)
console.log(copyObj)
Ответ
Оба console.log покажут { name: 'Андрей' }. copyObj не является копией объекта: присваивание сохранило ту же ссылку, поэтому поле изменилось для обеих переменных.
Проверка copyObj === sourceObj вернёт true. const не замораживает поля объекта и не запрещает такую мутацию. Для независимого объекта верхнего уровня используйте { ...sourceObj } при создании copyObj. Если внутри есть вложенные объекты, spread не копирует их глубоко, и общие ссылки на вложенные значения сохранятся.