Я написал следующий JavaScript:
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
Этот код объявляет переменную myArray и устанавливает ее в значение массива. Затем он объявляет вторую переменную copyOfMyArray и устанавливает ее в myArray.
Он выполняет операцию на copyOfMyArray, а затем предупреждает как myArray, так и copyOfMyArray. Так или иначе, когда я выполняю операцию на copyOfMyArray, кажется, что та же операция выполняется на myArray.
Затем код выполняет одно и то же с числовым значением: он объявляет переменную myNumber и устанавливает ее в числовое значение. Затем он объявляет вторую переменную copyOfMyNumber и устанавливает ее в myNumber. Он выполняет операцию на copyOfMyNumber, а затем предупреждает как myNumber, так и copyOfMyNumber. Здесь я получаю ожидаемое поведение: разные значения для myNumber и copyOfMyNumber.
В чем разница между массивом и числом в JavaScript, который, по-видимому, меняет массив, изменяет значение копии массива, где, когда изменение числа не изменяет значение копии числа?
Я предполагаю, что по какой-то причине массив ссылается по ссылке и номеру по значению, но почему? Как я могу узнать, какое поведение ожидать от других объектов?