Выведется новый объект { a: 1, b: 5 }. Массив array при этом продолжит содержать прежний объект { a: 1 }; строка его вывода в условии закомментирована.
Какой вывод будет у консольного кода (пример 59)
Выведется новый объект { a: 1, b: 5 }. Массив array при этом продолжит содержать прежний объект { a: 1 }; строка его вывода в условии закомментирована.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, что появится в консоли после выполнения следующего фрагмента JavaScript‑кода.
let obj = { a: 1 };
let array = [obj];
obj = { ...obj, b: 5 };
console.log(obj); // Console.log(array);
Ответ
Выведется новый объект { a: 1, b: 5 }. Массив array при этом продолжит содержать прежний объект { a: 1 }; строка его вывода в условии закомментирована.
Spread создаёт поверхностную копию объекта, затем к ней добавляется b. Присваивание obj переключает переменную на новую ссылку, но не обновляет элементы ранее созданного массива. Поэтому array[0] === obj теперь false. Чтобы изменить объект, который виден через array, можно мутировать исходный obj.b до переназначения либо отдельно заменить array[0] новым объектом.