Я написав такий 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);безпосередньо в цьому контексті?