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

Cuando asignamos un objeto a una variable o constante, no se almacena el objeto en sí, sino una referencia a su ubicación en la memoria.

Es por esto que, aunque un objeto esté declarado con const, sus propiedades pueden cambiar.

Veamos un ejemplo:

const company = {};

// Podemos modificar sus propiedades
company.name = 'Códica';

console.log(company); // { name: 'Códica' }

// Pero no podemos reasignarlo a otro objeto
company = {}; // ¡Error! No se puede cambiar la referencia

En cambio, si usamos let, sí podemos cambiar la referencia:

let object = {};

// Reasignamos la referencia
object = {}; // No hay error

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:

const company = { name: 'Códica' };

console.log(company === { name: 'Códica' }); // false

¿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:

const copyOfCompany = company; // Se copia la referencia

console.log(copyOfCompany === company); // true

Ahora ambas variables company y copyOfCompany apuntan al mismo objeto. Por lo tanto, si modificamos uno, el otro también cambia:

company.createdAt = 2012;

console.log(copyOfCompany); // { name: 'Códica', createdAt: 2012 }

Incluso dos objetos vacíos son distintos entre sí:

console.log({} === {}); // false

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:

const changeObj = (o) => {
  o.key = 'value';
};

const obj = {};

changeObj(obj);
console.log(obj); // { key: 'value' }

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 const no puede cambiar de referencia, pero sí modificar las propiedades del objeto.
  • La comparación con === solo devuelve true si 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