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

Примитивный против непримитивного

Все типы данных в javascript подпадают под две категории, называемые примитивными типами данных и непримитивными типами данных (также известными как ссылки на объекты или сложные типы данных или составные типы данных). Примитивные значения в JavaScript — это числа, строки, логические значения, null, undefined. Такие объекты, как функции и массивы, называются непримитивными значениями.

Когда переменной присваивается примитивное значение (например, let name = ‘Mike’), переменной присваивается это значение напрямую. Но когда переменной присваивается непримитивное значение, то есть объект, сначала объект сохраняется где-то в вычисляемой памяти, а затем для этой переменной устанавливается ссылка на эту память, содержащую объект.

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

Копирование содержимого в примитивных типах по сравнению с непримитивными типами

До сих пор мы узнали, что переменные, для которых заданы примитивные значения, содержат фактические значения, а переменные, для которых заданы не примитивные значения, содержат только ссылки (или адреса памяти).

Давайте рассмотрим пример каждого из них, чтобы понять, как этот факт влияет на поведение присваивания переменных. В примере1 bookName назначается movieName в строке 2. Обновление значения, хранящегося в bookName в строке 5, не влияет на значение, хранящееся в movieName, поскольку bookName и movieName примитивные типы

В примере 2 объект со свойствами name и author создается в памяти, и ссылка на эту память присваивается переменной book в строка1. Теперь переменная book, содержащая ссылку на объект, назначается новой переменной movie в строке 5. Когда свойство name обновляется в строке 6, оно фактически обновляется в объекте, хранящемся в памяти, а не непосредственно в объектной книге. Поймите этот момент, чтобы прояснить всю картину. Поскольку и книга, и фильм содержат ссылку на один и тот же объект, оба свойства имени обновляются.

Обратитесь к другому моему блогу для назначения объекта, который содержит ссылку на другой адрес памяти здесь