Objetos

Imagina que estás describiendo a un usuario: un nombre, un correo electrónico, una edad, si ha iniciado sesión. Podrías distribuir eso en cuatro variables separadas, pero pertenecen juntas, y mantenerlas separadas significa pasar cuatro cosas cada vez que hablas de "el usuario". Un objeto te permite reunir todo en un valor, donde cada parte tiene un nombre que puedes buscar. La mayoría de los datos que manejarás, un usuario, un producto, un carrito, llegan con exactamente esta forma.
Crear un objeto
Un objeto es una colección de valores nombrados, escrita con llaves. Dentro, enumeras pares clave: valor, separados por comas. La clave es el nombre; el valor es lo que contiene:
const user = {
name: "Carlos",
age: 27,
};
console.log(user.name); // CarlosLees un valor con un punto y la clave: user.name. Esto se llama notación de punto, y es lo que usarás la mayoría de las veces. La clave a la izquierda, el valor que almacena a la derecha.
Hay una segunda forma de leer un valor, usando corchetes con la clave como una cadena:
console.log(user["name"]); // CarlosLa mayoría de las veces la notación de punto se lee más limpia, así que úsala. Los corchetes tienen su lugar cuando la clave no es una palabra simple (digamos que tiene un espacio) o cuando no sabes la clave de antemano y está en otra variable.
const product = {
title: "Lámpara de escritorio",
price: 40,
inStock: true,
};
console.log(`${product.title} costs ${product.price}`); // Lámpara de escritorio costs 40Un objeto es un valor como cualquier otro. Puedes almacenarlo en una const, ponerlo en un array, pasarlo a una función y devolverlo. Las claves dan nombres a sus partes, que es el punto completo: product.price dice lo que es, donde un 40 simple sentado en una variable no lo hace.
clave: valor en llaves. Lee un valor con un punto y la clave, como user.name. Recurre a la forma de corchetes solo cuando la clave tiene un carácter impar en ella o vive en una variable. Cambiar un objeto
Los objetos no son fijos una vez que los haces. Puedes agregar una nueva clave, cambiar una existente o eliminar una completamente. Para agregar o actualizar, asigna a la clave:
const user = {
name: "Carlos",
};
user.age = 30; // agrega una nueva clave
user.name = "Carlos González"; // actualiza la existente
console.log(user); // { name: "Carlos González", age: 30 }Si la clave ya existe, asignarle reemplaza el valor. Si no existe, se crea. Para eliminar una clave, usa delete:
delete user.age;
console.log(user); // { name: "Carlos González" }Aquí está la parte que sorprende a la gente. Un objeto const aún puede tener sus propiedades cambiadas. const significa que el nombre user no puede apuntar a un objeto diferente, pero el objeto al que apunta es juego justo:
const cart = { total: 0 };
cart.total = 25; // bien, cambiando lo que hay dentro
// cart = { total: 25 }; // esto daría error, reasignando el nombredelete para eliminar una. La sorpresa es const: te detiene apuntando user a un objeto diferente, pero aún puedes cambiar lo que hay dentro de uno que contiene. Me tomó un tiempo dejar de esperar que const bloqueara todo. Métodos y this
Un valor en un objeto puede ser una función. Cuando lo es, se llama método: algo que el objeto puede hacer, en lugar de un hecho que almacena. Lo llamas con el mismo punto, más paréntesis:
const user = {
name: "Carlos",
greet() {
return `Hi, I am ${this.name}`;
},
};
console.log(user.greet()); // Hi, I am CarlosLa nueva palabra dentro es this. Cuando llamas a user.greet(), this significa "el objeto en el que se llamó este método", que aquí es user. Así que this.name lee la clave name del mismo objeto. Así es como un método accede a los valores de su propio objeto sin que tengas que pasarlos.
user.greet(). Dentro, this significa el objeto en el que se llamó el método, así que this.name lee el propio name de ese objeto. Así es como un método accede a los valores de su propio objeto. Objetos y arrays juntos
La mayoría de los datos reales es una lista de objetos: muchos usuarios, muchos productos, cada objeto un registro con las mismas claves. Pones objetos dentro de un array:
const products = [
{ title: "Lámpara de escritorio", price: 40 },
{ title: "Cuaderno", price: 6 },
{ title: "Bolígrafo", price: 3 },
];
console.log(products[0].title); // Lámpara de escritorioAccedes a un objeto por su posición (products[0]), luego a uno de sus campos con un punto (.title). Encadenado, products[0].title lee el título del primer producto.
Para leer un campo de cada objeto, itera sobre el array:
for (const product of products) {
console.log(product.title);
}
// Lámpara de escritorio
// Cuaderno
// BolígrafoCada turno del bucle, product es un objeto de la lista, y product.title lee su título. Esta forma, un array de objetos que iteras, es la mayoría del trabajo de datos que harás.
products[0], luego a un campo con products[0].title. Itera sobre el array para tocar cada registro, y tienes el patrón detrás de la mayoría del trabajo de datos que harás. A dónde van los objetos después
Los objetos y los arrays son las dos estructuras a las que recurrirás constantemente, y la mayoría de los datos que manejas son algún anidamiento de los dos: objetos con campos de array, arrays de objetos, y combinaciones de ambos. Empareja los con métodos de array y puedes dar forma a casi cualquier dato en la forma que necesites.
El siguiente paso es poner los objetos a trabajar en una página. Cuando llegas al DOM, los elementos que lees y cambias son también objetos, con claves que estableces y métodos que llamas, así que todo aquí se traslada directamente.

