Помимо других очень важных тем в 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 может помочь вам стать хорошим разработчиком, а также может помочь вам в вопросах на собеседовании.
Дайте мне знать в разделе комментариев, если у вас есть какие-либо вопросы, и не стесняйтесь нажимать кнопку хлопка, если вам понравилась эта статья.