Referencias y Valores
1. Referencias a Objetos en JavaScript (Tipos Primitivos y Objetos) #
En JavaScript, es importante entender la diferencia entre tipos primitivos y objetos, especialmente cuando se trata de cómo se manejan en la memoria y cómo se pasan entre variables y funciones.
Tipos Primitivos #
Los tipos primitivos en JavaScript son los datos más simples y básicos. Estos incluyen:
number: Números, como42o3.14.string: Cadenas de texto, como"Hola"o'Mundo'.boolean: Valores de verdad,trueofalse.null: Un valor que representa la ausencia intencional de un valor.undefined: Indica que una variable ha sido declarada pero no se le ha asignado un valor.symbol: Un valor único e inmutable, generalmente usado como identificador.bigint: Números enteros grandes.
Características de los Tipos Primitivos #
- Inmutabilidad: Los valores primitivos no pueden cambiar. Si asignas un nuevo valor a una variable que contiene un tipo primitivo, estás creando un nuevo valor, no modificando el existente.
- Pasaje por valor: Cuando asignas o pasas un tipo primitivo a una variable o función, se copia el valor. No se pasa el valor original, sino una copia de él.
Ejemplo:
1let a = 10; 2let b = a; // Se copia el valor de 'a' en 'b' 3b = 20; // Cambiamos 'b', pero 'a' sigue siendo 10 4console.log(a); // Muestra 10 5console.log(b); // Muestra 20Salida de consola 10 20
Objetos #
Un objeto en JavaScript es más complejo que un tipo primitivo. Puede contener múltiples valores organizados como propiedades y métodos. Los arrays y funciones también son considerados objetos en JavaScript.
Características de los Objetos #
- Mutabilidad: A diferencia de los tipos primitivos, los objetos pueden cambiar. Puedes agregar, modificar o eliminar propiedades de un objeto después de haberlo creado.
- Pasaje por referencia: Cuando asignas o pasas un objeto a una variable o función, lo que se copia es una referencia al objeto original, no el objeto en sí. Esto significa que si cambias el objeto usando la nueva referencia, el cambio afectará al objeto original.
Ejemplo:
1let objeto1 = { nombre: "Juan" }; 2let objeto2 = objeto1; // Ambos apuntan al mismo objeto en la memoria 3objeto2.nombre = "Ana"; // Cambia el nombre a través de 'objeto2' 4console.log(objeto1.nombre); // Muestra "Ana", porque 'objeto1' y 'objeto2' apuntan al mismo objetoSalida de consola Ana
Diferencia clave: Pasaje por valor vs. Pasaje por referencia #
- Tipos Primitivos: Se pasan por valor, lo que significa que se hace una copia del valor original. Cambiar la copia no afecta el valor original.
- Objetos: Se pasan por referencia, lo que significa que la variable contiene una referencia al objeto en la memoria. Cambiar el objeto a través de esta referencia afecta el objeto original.
2. Ejemplos: #
1// Vamos a entender el uso/funcionamiento de objetos y de tipos primitivos 2// Vamos a ver como se comportan los tipos primitivos 3var a = 10; 4var b = a; 5console.log(a); 6console.log(b); 7 8a = 20; 9console.log(a); 10console.log(b); 11 12// Los tipos primitivos se pasan por valorSalida de consola 10 10 20 10
1var c = { 2 nombre: "Angel" 3}; 4var d = c; 5console.log(c); 6console.log(d); 7c.nombre = "Paula"; 8console.log(c); 9console.log(d); 10// Los objetos se pasan por referenciaSalida de consola { nombre: 'Angel' } { nombre: 'Angel' } { nombre: 'Paula' } { nombre: 'Paula' }
Resumen del tema
Conceptos clave #
- Paso por Valor (Primitivos): copiar una variable primitiva duplica su valor en la pila (stack); modificar una copia no afecta a la variable original.
- Paso por Referencia (Objetos/Arrays/Funciones): las variables guardan punteros a la dirección en el montón (heap); asignar una variable a otra comparte el mismo objeto subyacente.
- Mutabilidad vs Reasignación: mutar una propiedad (
obj.x = 2) afecta a todas las referencias; reasignar la variable (obj = {}) apunta a una nueva dirección sin alterar el objeto anterior.
Qué debes recordar #
Los primitivos se copian por valor de forma independiente; los objetos comparten referencia en memoria, por lo que mutar uno altera todas las variables que apunten a él.