Подробно о типах данных Javascript(2)

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

**1.Массивы**
**2.Объекты**

**Давайте сначала изучим предварительные условия**

**Куча**

В информатике куча — это область памяти, используемая для хранения объектов и других сложных структур данных. Это динамическая структура данных, что означает, что она может увеличиваться и уменьшаться в размере по мере необходимости для размещения хранящихся в ней данных.

**Стек**
В информатике стек — это область памяти, используемая для хранения примитивных типов данных и адресов памяти структур данных в куче. Это структура данных Last In First Out (LIFO), что означает, что последний элемент, добавленный в стек, является первым элементом, который можно удалить.

** Итак, как работает не примитивный (эталонный) тип данных **

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

`пусть обр=[1,2,3,4,5]

// Массив «arr» хранится в куче
// Ссылка на массив «arr» хранится в стеке

let person = {
name: «John Doe»,
age: 35
};

// Объект «person» хранится в куче
// Ссылка на объект «человек» хранится в стеке
`

**Но что происходит, когда мы мутируем массив или объект**

Когда вы изменяете массив или объект в JavaScript, данные в куче обновляются, чтобы отразить изменения, но ссылка в стеке остается прежней. Это означает, что когда вы обращаетесь к массиву или объекту после его изменения, вы по-прежнему используете ту же ссылку в стеке для поиска обновленных данных в куче.
`
// Создаем новый массив
пусть числа = [1, 2, 3];

// Массив «numbers» хранится в куче
// Ссылка на массив «numbers» хранится в стеке

// Изменяем массив
numbers.push(4);

// Данные в куче обновляются до [1, 2, 3, 4]
// Ссылка на стек остается прежней

// Доступ к массиву
let lastNumber = numbers[3];

// Ссылка на стек используется для поиска обновленных данных в куче`

ссылка на codepen
«https://codepen.io/waqas-on-github/pen/vYrwNaz?editors=0012'