Skip to content

Lección 33: Objetos Literales

Los objetos literales son la forma más común de crear objetos en JavaScript. Se definen con llaves {} y contienen pares clave-valor (propiedades y métodos).

const persona = {
nombre: 'Ana',
edad: 28,
saludar() {
console.log(`Hola, soy ${this.nombre}`);
}
};
const libro = {
titulo: '1984',
autor: 'George Orwell',
'año publicación': 1949
};
// Notación de punto
console.log(libro.titulo); // "1984"
// Notación de corchetes (para propiedades con espacios o dinámicas)
console.log(libro['año publicación']); // 1949
const clave = 'autor';
console.log(libro[clave]); // "George Orwell"
const usuario = {};
usuario.nombre = 'Carlos'; // Añadir
usuario.edad = 30; // Añadir
usuario.edad = 31; // Modificar
delete usuario.edad; // Eliminar
console.log(usuario); // { nombre: 'Carlos' }
// Objetos anidados
const estudiante = {
nombre: 'Luis',
cursos: {
javascript: { nota: 95, profesor: 'Ana' },
python: { nota: 88, profesor: 'Carlos' }
},
direccion: {
ciudad: 'Madrid',
pais: 'España'
}
};
console.log(estudiante.cursos.javascript.nota); // 95
console.log(estudiante['cursos']['python']['profesor']); // "Carlos"
// Comparación de objetos (por referencia, no por valor)
const obj1 = { a: 1 };
const obj2 = { a: 1 };
const obj3 = obj1;
console.log(obj1 === obj2); // false (distintas referencias)
console.log(obj1 === obj3); // true (misma referencia)
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true (comparando valores)

Los objetos se comparan por referencia, no por valor. Dos objetos con exactamente el mismo contenido son distintos porque ocupan distintas posiciones en memoria.

const a = { x: 1 };
const b = { x: 1 };
a.x = 2;
console.log(b.x); // 1 — son independientes
// Para comparar por valor, usar JSON.stringify o librerías como Lodash

Las propiedades pueden ser strings o Symbols. Si usas un número como clave, se convierte a string automáticamente.

Usa la notación de punto siempre que sea posible (es más legible). Reserva la notación de corchetes para:

  • Propiedades con nombres dinámicos (variables)
  • Propiedades con caracteres especiales o espacios
  • Acceso a propiedades numéricas

Para clonar objetos de forma simple, usa el spread operator {...obj} en lugar de asignar manualmente.

Crea un objeto nevera que contenga:

  • Propiedad marca (string)
  • Propiedad productos (array de objetos con nombre y cantidad)
  • Método agregarProducto(nombre, cantidad) que añada un producto
  • Método listarProductos() que muestre todos los productos
const nevera = {
// Escribe aquí
};
nevera.agregarProducto('Leche', 2);
nevera.agregarProducto('Huevos', 12);
nevera.listarProductos();
// "Productos en la nevera: Leche (2), Huevos (12)"