Что отобразится в консоль после изменения свойства через копию объекта

Оба 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 не копирует их глубоко, и общие ссылки на вложенные значения сохранятся.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее