Я написал следующий код 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 в том, что кажется, что изменение массива изменяет значение копии массива, тогда как изменение числа не меняет значение копии числа?
Я предполагаю, что почему-то на массив ссылаются по ссылке, а число по значению, но почему? Как я могу узнать, какого поведения ожидать от других объектов?
myArray.slice(0);непосредственно в этом контексте?