Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.
Что меняется в массиве при копировании ссылки и spread?
Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод:
const a = [{n: 1}];
const b = a;
const c = [...a];
b.push({n: 2});
console.log(a.length, c.length);
c[0].n = 9;
console.log(a[0].n, b === a, c === a);
Ответ
Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.
Добавление через b меняет структуру a, но не c. Изменение n через c затрагивает объект, общий всем трём путям доступа. Spread выполняет поверхностное копирование контейнера, не рекурсивное клонирование элементов. Чтобы независимо изменить первый элемент, нужно создать и новый объект на этом уровне, например {...a[0], n:9}.