En Javascript si igualamos una variable a un tipo primitivo, se copia el valor, pero si no es un primitivo, copiamos la referencia del valor.
¿Y que pasa si copiamos la referencia en vez del valor? Que ambos objetos apuntan al mismo sitio, y si modificamos uno, el otro tambien se vera afectado.
Ejemplo con primitivos:
var persona1 = "Ruben"; var persona2 = "Ale"; console.log("Persona 1:",persona1,"\nPersona2:",persona2); persona1 = persona2; console.log("Persona 1:",persona1,"\nPersona2:",persona2); persona1 = "Pepe"; console.log("Persona 1:",persona1,"\nPersona2:",persona2);
Vemos que en el segundo paso igualamos persona1 a persona2 y en el tercer paso asignamos a persona1 el valor de Pepe. ¿Que le pasa al persona2? No se modifica…. lo que por lógica esperamos que pase.
Ejemplo con tipos no primitivos:
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = equipo2; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);
¿Que ha pasado? …Hacemos lo mismo que antes, pero ahora se modifican ambos arrays…. ¿por qué?…¡Porque se nos ha copiado la referencia no el valor!