Asignación por valor vs referencia en Node.js: ¿Cuál es la diferencia?

Asignación por valor vs referencia en Node.js: ¿Cuál es la diferencia?

¿En qué consiste la asignación de valor vs referencia?

Cuando asignamos un valor a una variable en Javascript, el tipo de asignación depende del tipo de valor que estamos asignando.

Abrimos nuevamente la terminal de node.

$ node

Vamos ahora a ejecutar la siguiente sentencia.

> var persona1 = 'Jose'
> var persona2 = persona1
> persona1 = 'Pedro'
> console.log(persona2) // => Jose
> console.log(persona1)  // => Pedro

Nos damos cuenta que persona2 no esta ligado intrínsecamente con persona1, esto es una asignación por valor, que es básicamente cuando una variable toma el valor de otra y ocupa dicho espacio necesario para llenar ese valor en memoria.

Ahora vamos a hacer lo mismo pero con un arreglo.

> var personas1 = ['Pedro','Jose','Teresa']
> var personas2 = personas1
> personas1.push('Diego')
> console.log(personas1) // ['Pedro','Jose','Teresa','Diego']
> console.log(personas2) // ['Pedro','Jose','Teresa','Diego']

En este caso, como vemos si modificamos el arreglo personas1, el arreglo personas2 también sufre una modificación. Ambas variables apuntan al mismo espacio en memoria (en realidad los arreglos son direcciones de otros espacios en memoria), cuando esto sucede la asignación se le conoce como asignación por referencia.

Javascript utiliza asignación por valor para los datos primitivos (strings, números, booleanos, etc) y asignación por referencia para objetos (clases, funciones, arreglos, colecciones {}, etc).