JS: Objetos
Teoría: Enlaces
Cuando trabajamos con objetos en JavaScript, es importante entender cómo se almacenan en la memoria. A diferencia de los tipos primitivos como number, string o boolean, los objetos son un tipo de dato por referencia.
Variables, Constantes y Referencias en Objetos
Es por esto que, aunque un objeto esté declarado con const, sus propiedades pueden cambiar.
⏬ Veamos un ejemplo:
En cambio, si usamos let, sí podemos cambiar la referencia:
La clave aquí es entender que const impide cambiar la referencia, pero no bloquea las modificaciones dentro del objeto.
Comparación de Objetos
Dado que los objetos son almacenados por referencia, la comparación con === no evalúa su contenido, sino si ambos comparan la misma referencia en memoria.
⏬ Ejemplo:
¿Por qué false, si los dos objetos tienen el mismo contenido? Porque aunque sus propiedades sean idénticas, son dos objetos diferentes en memoria.
Sin embargo, si copiamos una referencia, entonces sí serán iguales:
Ahora ambas variables company y copyOfCompany apuntan al mismo objeto. Por lo tanto, si modificamos uno, el otro también cambia:
Incluso dos objetos vacíos son distintos entre sí:
Cada vez que se crea un objeto, se genera una nueva referencia en memoria, por lo que siempre serán diferentes.
Paso de Objetos a Funciones
Cuando pasamos un objeto a una función, lo hacemos por referencia. Esto significa que las funciones pueden modificar el objeto original.
⏬ Ejemplo:
Aquí, la función changeObj agrega una propiedad al objeto obj. Como obj y o apuntan al mismo lugar en memoria, cualquier cambio dentro de la función se refleja en el objeto original.
Resumen
- Los objetos en JavaScript se almacenan por referencia.
- Una variable
constno puede cambiar de referencia, pero sí modificar las propiedades del objeto. - La comparación con
===solo devuelvetruesi ambos valores apuntan a la misma referencia en memoria. - Pasar un objeto a una función no crea una copia, sino que lo pasa por referencia, permitiendo modificaciones.
Este concepto es clave cuando trabajamos con estructuras de datos en JavaScript y nos ayuda a evitar errores inesperados en nuestro código.
Completado
0 / 13