Ich habe folgendes JavaScript geschrieben:
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
Dieser Code deklariert eine Variable myArrayund setzt sie auf einen Array-Wert. Es deklariert dann eine zweite Variable copyOfMyArrayund setzt sie auf myArray. Es führt eine Operation für aus copyOfMyArrayund alarmiert dann beide myArrayund copyOfMyArray. Wenn ich eine Operation ausführe copyOfMyArray, scheint es irgendwie so, als würde dieselbe Operation ausgeführt myArray.
Der Code macht dann dasselbe mit einem Zahlenwert: Er deklariert eine Variable myNumberund setzt sie auf einen Zahlenwert. Es deklariert dann eine zweite Variable copyOfMyNumberund setzt sie auf myNumber. Es führt eine Operation für aus copyOfMyNumberund alarmiert dann beide myNumberund copyOfMyNumber. Hier bekomme ich das erwartete Verhalten: verschiedene Werte für myNumberund copyOfMyNumber.
Was ist der Unterschied zwischen einem Array und einer Zahl in JavaScript, dass das Ändern eines Arrays den Wert einer Kopie des Arrays zu ändern scheint, während das Ändern einer Zahl den Wert einer Kopie der Zahl nicht ändert?
Ich vermute, dass aus irgendeinem Grund auf das Array als Referenz und die Zahl nach Wert verwiesen wird, aber warum? Wie kann ich wissen, welches Verhalten bei anderen Objekten zu erwarten ist?
myArray.slice(0);direkt in diesem Kontext zuweisen ?