Почему при изменении переменной которой присвоен элемент массива, меняется и сам элемент в массиве? JS

'use strict';
const games = [{
        id: 1,
        title: 'Mario'
    },
    {
        id: 2,
        title: 'Zelda'
    },
    {
        id: 3,
        title: 'Donkey Kong'
    }
]; 

let test = games[0];
test.id = 22222
alert( JSON.stringify(games)); 
games.splice(0, 1);

alert( JSON.stringify(games)); 
alert( JSON.stringify(test)); 

Не могу понять:

  1. Почему когда я меняю значения переменой меняется и значения id в массиве

  2. Почему тогда когда я удаляю значения в массиве оно не удаляться с переменой??


Ответы (1 шт):

Автор решения: Doofy

Потому что в данном случае ты работаешь со ссылками на объекты, ты меняешь не переменную, а свойство объекта, а переменная как ссылалась на один объект, так и продолжила ссылаться.

С удалением то же самое. Удалил ссылку из массива, а ссылка в переменной осталась.

'use strict';

const games = [
  { id: 1, title: 'Mario' },
  { id: 2, title: 'Zelda' },
  { id: 3, title: 'Donkey Kong' }
];

let test = Object.assign({}, games[0]);
test.id = 22222;

console.log( JSON.stringify(games) ); 
games.splice(0, 1);

console.log( JSON.stringify(games) ); 
console.log( JSON.stringify(test) ); 

→ Ссылка