Supongamos que tenemos dos variables:
let num1 = 10;
let num2 = num1;
Ambas tienen como valor 10, y esto es porque a la primer variable se le asigna ese número, mientras que a la segunda se le asigna el valor de la primera.
Pero si entonces modificamos la segunda variable:
num2 = 5;
console.log(num1);
El valor de la primera se conserva como 10.
Esto se debe a que en los datos primitivos como boolean, int, float, string, etc; al asignar a una variable el valor de otra, se pasa como copia.
Es lo mismo que si nosotros copiamos un archivo y modificamos el segundo, el primero no sufrirá cambios; lo mismo que si modificamos el primero, tampoco estarán impactados estos cambios en el segundo.
Pasar información por referencia
Ahora bien, esto no funciona igual con otro tipo de datos como por ejemplo los objetos o arrays:
//Creamos un objeto con la propiedad nombre.
let persona1 = {
nombre: "Juan"
};
//Asignamos a una variable una referencia de la primer variable.
let persona2 = persona1;
//Cambiamos la propiedad nombre de la segunda variable.
persona2.nombre = "Ricardo";
//Mostramos por pantalla el nombre de la primer variable.
console.log(persona1.nombre);
Al probar el código, podemos ver que cuando modificamos la propiedad nombre en la segunda variable, también se modifica en la primera. Esto sucede porque los objetos no se pasan como copia, sino como referencia.
Lo cual significa que en lo siguiente:
let persona2 = persona1;
No estamos asignándole a persona2 el valor de persona1, sino la referencia en memoria de esta última.
Pasar información por copia
Para cambiar este comportamiento, es decir pasar el valor de un objeto a otro, y poder trabajar ambos de forma independiente, tendremos que cambiar el código de la siguiente forma:
//Creamos un objeto con la propiedad nombre.
let persona1 = {
nombre: "Juan"
};
//Asignamos el valor por copia.
let persona2 = {...persona1};
//Cambiamos la propiedad nombre de la segunda variable.
persona2.nombre = "Ricardo";
//Mostramos por pantalla el nombre de la primer variable.
console.log(persona1.nombre);
En el caso de que se tratase de un array, tenemos que cambiar las llaves ( {} ) por corchetes ( [] ):
//Creamos un array con los colores primarios.
const colores_primarios = ["Amarillo", "Azul", "Rojo"];
//Copiamos los colores primarios.
const color_primarios_secundarios = [...colores_primarios];
//Y agregamos los secundarios con el método push, que suma posiciones a un array.
color_primarios_secundarios.push("Naranja", "Verde", "Violeta");
//Mostramos por consola los colores primarios.
console.log(colores_primarios);
//Mostramos por consola los colores primarios y secundarios.
console.log(color_primarios_secundarios);