Подробно о типах данных 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'