Хранение значения переменной по ссылке
Одним из фундаментальных отличий объектов от примитивных типов данных является то, что они хранятся и копируются «по ссылке».
Примитивные типы: строки, числа, логические значения – присваиваются и копируются «по значению».
Например:
let message = "Hello!";
let phrase = message;
В результате мы имеем две независимые переменные, каждая из которых хранит строку "Hello!".
Объекты ведут себя иначе.
Сам объект хранится где-то в памяти. А в переменной лежит «ссылка» на эту область памяти.
Когда переменная объекта копируется – копируется ссылка, сам же объект не дублируется.
Если мы представляем объект как ящик, то переменная – это ключ к нему. Копирование переменной дублирует ключ, но не сам ящик.
Например:
let user = { name: "John" };
let admin = user; // копируется ссылка
Теперь у нас есть две переменные, каждая из которых содержит ссылку на один и тот же объект и мы можем использовать любую из переменных для доступа и изменения содержимого.