¿Qué es un Objeto en JavaScript?
Imagina que necesitas guardar información sobre un usuario en tu programa. Podrías usar muchas variables independientes:
let nombre = "María";
let edad = 28;
let profesion = "Ingeniera";
let ciudad = "Madrid";Aunque esto funciona, se vuelve difícil de gestionar cuando tienes múltiples usuarios o necesitas pasar esa información entre funciones. Aquí es donde los objetos resultan esenciales.
Un objeto es una colección de propiedades, donde cada propiedad tiene un nombre (clave) y un valor. El valor puede ser cualquier tipo de dato de JavaScript: strings, números, booleanos, arrays, e incluso otras funciones u objetos.
Creando Objetos
La forma más común de crear un objeto es usando llaves rizadas (curly braces) también conocidas como notación literal:
let usuario = {
nombre: "María",
edad: 28,
profesion: "Ingeniera",
ciudad: "Madrid"
};También puedes crear un objeto vacío y agregar propiedades después:
let usuario = {};
usuario.nombre = "María";
usuario.edad = 28;Accediendo a las Propiedades
Existen dos formas principales de acceder a las propiedades de un objeto:
Notación de punto
console.log(usuario.nombre); // "María"
console.log(usuario.edad); // 28Notación de corchetes
console.log(usuario["nombre"]); // "María"
console.log(usuario["edad"]); // 28let propiedad = "nombre";
console.log(usuario[propiedad]); // "María"Modificando y Agregando Propiedades
Para modificar una propiedad existente, simplemente asigna un nuevo valor:
usuario.edad = 29;
console.log(usuario.edad); // 29Para agregar una nueva propiedad:
usuario.email = "[email protected]";
console.log(usuario.email); // "[email protected]"Para eliminar una propiedad, usa la palabra clave delete:
delete usuario.ciudad;
console.log(usuario.ciudad); // undefineddelete: elimina permanentemente la propiedad del objeto. Si solo quieres que tenga un valor vacío o indefinido, asigna null o undefined en su lugar.Métodos en Objetos
Una propiedad también puede ser una función. En este caso, la llamamos método:
let usuario = {
nombre: "María",
edad: 28,
saludar: function() {
return "¡Hola! Soy " + this.nombre;
},
cumpleanos: function() {
this.edad += 1;
return "¡Feliz cumpleaños! Ahora tienes " + this.edad;
}
};
console.log(usuario.saludar()); // "¡Hola! Soy María"
console.log(usuario.cumpleanos()); // "¡Feliz cumpleaños! Ahora tienes 29"this dentro de un método se refiere al objeto que contiene el método. Es la forma de acceder a otras propiedades del mismo objeto.Objetos Anidados
Los valores de un objeto pueden ser otros objetos, creando estructuras más complejas:
let empleado = {
nombre: "Carlos",
cargo: "Desarrollador Senior",
empresa: {
nombre: "TechCorp",
ubicacion: "Barcelona",
empleados: 150
},
habilidades: ["JavaScript", "Python", "SQL"]
};
console.log(empleado.empresa.nombre); // "TechCorp"
console.log(empleado.habilidades[0]); // "JavaScript"Ver másTambién puedes combinar objetos con arrays para crear estructuras de datos más elaboradas:
let equipo = [
{ nombre: "Ana", rol: "Diseñadora" },
{ nombre: "Luis", rol: "Desarrollador" },
{ nombre: "Marta", rol: "Gerente de Proyecto" }
];
console.log(equipo[1].nombre); // "Luis"
console.log(equipo[2].rol); // "Gerente de Proyecto"Iterando sobre Objetos
Para recorrer todas las propiedades de un objeto, puedes usar el bucle for...in:
let libro = {
titulo: "El Principito",
autor: "Antoine de Saint-Exupéry",
anio: 1943,
genero: "Ficción"
};
for (let clave in libro) {
console.log(clave + ": " + libro[clave]);
}
/*
titulo: El Principito
autor: Antoine de Saint-Exupéry
anio: 1943
genero: Ficción
*/Otros Métodos Útiles
| Método | Descripción | Ejemplo |
|---|---|---|
Object.keys() | Devuelve un array con las claves | Object.keys(libro) |
Object.values() | Devuelve un array con los valores | Object.values(libro) |
Object.entries() | Devuelve array de pares [clave, valor] | Object.entries(libro) |
console.log(Object.keys(libro)); // ["titulo", "autor", "anio", "genero"]
console.log(Object.values(libro)); // ["El Principito", "Antoine de Saint-Exupéry", 1943, "Ficción"]map(), filter() o forEach().Funciones Constructoras
Cuando necesitas crear múltiples objetos con la misma estructura, las funciones constructoras son muy útiles:
function Persona(nombre, edad, ciudad) {
this.nombre = nombre;
this.edad = edad;
this.ciudad = ciudad;
this.presentarse = function() {
return "Hola, soy " + this.nombre + " de " + this.ciudad;
};
}
let persona1 = new Persona("Elena", 25, "Sevilla");
let persona2 = new Persona("Pedro", 32, "Valencia");
console.log(persona1.presentarse()); // "Hola, soy Elena de Sevilla"
console.log(persona2.presentarse()); // "Hola, soy Pedro de Valencia"Las funciones constructoras fueron el estándar en versiones antiguas de JavaScript para crear "clases". En versiones modernas, las clases nativas de JavaScript ofrecen una sintaxis más limpia y legible.
Práctica: Construyendo un Carrito de Compras
Vamos a aplicar todo lo aprendido creando un simple carrito de compras:
- Crear el objeto carrito con una propiedad para los productos y métodos para agregar, eliminar y calcular el total:
let carrito = {
productos: [],
agregarProducto: function(nombre, precio, cantidad) {
// Verificar si el producto ya existe
let existente = this.productos.find(p => p.nombre === nombre);
if (existente) {
existente.cantidad += cantidad;
} else {
this.productos.push({ nombre, precio, cantidad });
}
return `${nombre} agregado al carrito`;
},
eliminarProducto: function(nombre) {
this.productos = this.productos.filter(p => p.nombre !== nombre);
return `${nombre} eliminado del carrito`;
},
calcularTotal: function() {
return this.productos.reduce((total, producto) => {
return total + (producto.precio * producto.cantidad);
}, 0);
},
mostrarCarrito: function() {
console.log("🛒 Contenido del carrito:");
this.productos.forEach(p => {
console.log(`- ${p.nombre}: $${p.precio} x ${p.cantidad}`);
});
console.log(`Total: $${this.calcularTotal()}`);
}
};- Usar el carrito:
carrito.agregarProducto("Camiseta", 25, 2);
carrito.agregarProducto("Pantalón", 45, 1);
carrito.agregarProducto("Camiseta", 25, 1); // Incrementa la cantidad
carrito.mostrarCarrito();
/*
🛒 Contenido del carrito:
- Camiseta: $25 x 3
- Pantalón: $45 x 1
Total: $120
*/
carrito.eliminarProducto("Pantalón");
console.log(carrito.calcularTotal()); // 75Resumen
A lo largo de esta lección hemos aprendido que:
- Los objetos almacenan datos en pares clave-valor, permitiendo organizar información relacionada.
- Se pueden crear usando la notación literal
{}o mediante funciones constructoras. - Las propiedades se acceden con notación de punto o corchetes.
- Los métodos son funciones dentro de objetos que pueden acceder a otras propiedades usando
this. - Los objetos pueden contener otros objetos, arrays y cualquier tipo de dato.
- JavaScript proporciona métodos útiles como
Object.keys(),Object.values()yObject.entries()para trabajar con objetos.
¿Cómo se llama la propiedad de un objeto que contiene una función?
- Atributo
- Índice
- Método
- Parámetro
this.¿Cuál es la diferencia entre estas dos formas de acceder a una propiedad: objeto.propiedad vs objeto["propiedad"]?
- No hay diferencia, ambas son idénticas
- La notación de punto es más moderna
- La notación de corchetes solo funciona con strings
- La notación de punto es más rápida
¿Qué palabra clave se usa para eliminar permanentemente una propiedad de un objeto?
- remove
- erase
- delete
- clear
delete objeto.propiedad elimina permanentemente la propiedad. Ten cuidado porque esta acción no se puede deshacer.Object.assign(), el operador de propagación ... para copiar objetos, y las diferencias entre objetos y arrays para elegir la estructura correcta según tus necesidades.