Почему присваивается не целый объект?

Когда в JavaScript происходит присваивание объекта одной переменной другой переменной, на самом деле передается не сам объект, а ссылка на объект в памяти. Это означает, что обе переменные указывают на один и тот же объект в памяти, и любые изменения, сделанные с помощью одной переменной, будут отражены в другой переменной, так как они на самом деле ссылаются на один и тот же объект.

Пример:

let obj1 = { key: 'value' };
let obj2 = obj1;

console.log(obj1); // { key: 'value' }
console.log(obj2); // { key: 'value' }

obj2.key = 'new value';

console.log(obj1); // { key: 'new value' }
console.log(obj2); // { key: 'new value' }

В приведенном выше примере obj1 и obj2 указывают на один и тот же объект в памяти. Поэтому изменение свойства key через obj2 отразится и на obj1, так как обе переменные по-сути указывают на один и тот же объект.

Если вы хотите создать независимую копию объекта, вам нужно использовать различные методы для клонирования объекта, такие как Object.assign(), оператор spread ... или метод JSON.parse(JSON.stringify(obj)).

Например:

let obj1 = { key: 'value' };
let obj2 = { ...obj1 };

obj2.key = 'new value';

console.log(obj1); // { key: 'value' }
console.log(obj2); // { key: 'new value' }

Таким образом, присваивание объекта в JavaScript связано с передачей ссылки на объект в памяти, а не копированием всего объекта целиком.