Изменить объект или заменить ссылку?
Чем изменение свойства отличается от присваивания переменной и что запрещает const.
В предыдущем уроке мы рассмотрели две переменные, которые ссылаются на один объект. Теперь сравним два действия: изменить свойство объекта и присвоить переменной другое значение.
const player = { hp: 100 };
let target = player;
target.hp = 50;
target = null;
// player.hp is 50; the object is still reachable
const player = { hp: 100 }создаёт объект и сохраняет ссылку на него вplayer.let target = playerприсваиваетtargetто же объектное значение. В обеих переменных теперь ссылки на один объект. Это не ссылкаtargetна переменнуюplayer: каждая переменная даёт доступ к объекту самостоятельно.target.hp = 50обращается к объекту по ссылке изtargetи записывает новое значение в свойствоhp. Меняется общий объект, поэтому иtarget.hp, иplayer.hpтеперь равны50.target = nullзаменяет значение только переменнойtarget. Теперь в нейnullвместо ссылки. Значениеplayerи сам объект не меняются; объект по-прежнему доступен черезplayer.
target.hp = 50
player
{ hp: 50 }target
Свойство изменилось. Обе ссылки сохранились.
target = null
player
{ hp: 50 }target
null
target больше не ведёт к объекту. player по-прежнему ведёт.
target.