He escrito el siguiente 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
Este código declara una variable myArrayy la establece en un valor de matriz. Luego declara una segunda variable copyOfMyArrayy la establece en myArray. Realiza una operación en copyOfMyArrayy luego alerta a ambos myArrayy copyOfMyArray. De alguna manera, cuando realizo una operación en copyOfMyArray, parece que se realiza la misma operación en myArray.
Luego, el código hace lo mismo con un valor numérico: declara una variable myNumbery la establece en un valor numérico. Luego declara una segunda variable copyOfMyNumbery la establece en myNumber. Realiza una operación en copyOfMyNumbery luego alerta a ambos myNumbery copyOfMyNumber. Aquí, obtengo el comportamiento esperado: diferentes valores para myNumbery copyOfMyNumber.
¿Cuál es la diferencia entre una matriz y un número en JavaScript que parece que cambiar una matriz cambia el valor de una copia de la matriz, mientras que cambiar un número no cambia el valor de una copia del número?
Supongo que, por alguna razón, se hace referencia a la matriz por referencia y al número por valor, pero ¿por qué? ¿Cómo puedo saber qué comportamiento esperar con otros objetos?
myArray.slice(0);directamente en ese contexto?