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

Javascript имеет два типа структур данных. Первые — это примитивные типы: String, Number, Boolean, undefined и null. Эти структуры данных передаются или копируются по значению. Другими структурами данных являются Object, Array и Function, которые передаются или копируются по ссылке.

В этой статье мы рассмотрим разницу между этими двумя типами и способы их использования в ваших программах на Javascript.

Тип значения:

var age = 25;
var name = 'john';

В приведенном выше коде значение 25 присваивается переменной age, а значение john присваивается переменной name. Рассмотрим их в табличной форме.

Теперь, если мы присвоим эти значения другим переменным с помощью оператора =. Он скопирует значения из этих переменных и присвоит их более новым переменным в качестве новых значений. Между старой и новой переменными не будет связи.

var newAge = age;
var newName = name;

Эти переменные действуют отдельно и никак не связаны друг с другом. Изменение одной переменной абсолютно не влияет на другую переменную.

var newAge = age;
var newName = name;
newAge = 55;
console.log('age:', age); \\ age:25
console.log('newAge:', newAge); \\ newAge:55

Тип ссылки:

Когда мы создаем Object , Array или Function в нашей программе. Они хранятся где-то в памяти нашего компьютера и присваиваются ему address значение. Мы называем это значение address ссылкой на Object , Array или Function. Допустим, мы создаем массив следующим образом.

1) var numArr = [1,2,3];

Механизм Javascript сохраняет содержимое этого массива в памяти и отмечает значение этой ячейки памяти. Допустим, содержимое этого массива хранится по адресу <#100>. Затем это значение адреса присваивается переменной numArr. Это означает, что переменная не содержит фактического значения массива, а имеет только ссылку на память этого массива.

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

2) var anotherArr = numArr;
3) anotherArr.push(4);

Теперь обе переменные numArr и anotherArr указывают на один и тот же массив в памяти. Изменение любого из них приведет к изменению данных массива. Если вы выполните консольный журнал обеих переменных, вы увидите одни и те же данные.

console.log(numArr); \\ [1,2,3,4]
console.log(anotherArr); \\ [1,2,3,4]

Поэтому, когда значение ссылочного типа в Javascript присваивается переменной, ее адресное значение копируется в новую переменную, а фактические данные в памяти остаются прежними. Объекты копируются по ссылке.

Если вы хотите избежать мутации ваших данных, Javascript предлагает определенные методы для копирования данных без мутации. В нашем примере выше, если мы хотим скопировать numArr в переменнуюpureArr, чтобы pureArr указывала на другой массив, и его изменение не повлияло на данные в numArr. Вы можете использовать функцию concat для массивов в Javascript, чтобы создать новую копию массива.

4) var pureArr = [].concat(numArr);
5) pureArr.push(5);

Теперь pureArr и anotherArr указывают на два отдельных массива, и изменение данных в одном массиве не вызовет никаких изменений в другом.

console.log(anotherArr); \\ [1,2,3,4]
console.log(pureArr); \\ [1, 2, 3, 4, 5]

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

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