Objetos y JSON
💡 🎯 Al terminar esta lección podrás…
- Crear y modificar objetos, y acceder a sus propiedades de varias formas.
- Usar desestructuración, spread y
Object.entries. - Leer datos con seguridad usando
?.y??. - Convertir datos a JSON y procesar listas de objetos.
1.Qué es un objeto
Un objeto agrupa datos relacionados bajo nombres (propiedades). Mientras un array es una lista ordenada por posición ([0], [1]…), un objeto es un conjunto de pares nombre–valor: describe una cosa con todas sus características.
const persona = {
nombre: "Ana",
edad: 28,
activa: true,
hobbies: ["leer", "correr"],
direccion: { ciudad: "Lima", pais: "Perú" }
};
console.log(persona.nombre); // notación de punto: "Ana"
console.log(persona["edad"]); // notación de corchetes: 28
console.log(persona.direccion.ciudad); // objetos dentro de objetos: "Lima"
console.log(persona.hobbies[0]); // "leer"
| Aspecto | Array | Objeto |
|---|---|---|
| Se identifica por | Posición (0, 1…) | Nombre ("nombre") |
| Ideal para | Una lista de cosas parecidas | Una cosa con varias características |
| Sintaxis | [ … ] | { clave: valor } |
2.Métodos y this
Una propiedad cuyo valor es una función se llama método. Dentro de él, this apunta al objeto que lo llamó:
⚠️ Importante · this y las funciones flecha
Las funciones flecha no tienen su propio this: heredan el del lugar donde se escribieron. Por eso, para los métodos de un objeto, usa la forma normal (nombre() { … }), no una flecha.
3.Atajos modernos: shorthand, desestructurar y spread
4.Recorrer objetos
| Función | Devuelve | Ejemplo |
|---|---|---|
Object.keys(o) | Array con las claves | ["nombre", "edad"] |
Object.values(o) | Array con los valores | ["Ana", 28] |
Object.entries(o) | Array de pares [clave, valor] | [["nombre","Ana"], ["edad",28]] |
Object.assign(a, b) | Copia propiedades de b en a | (mejor usa spread) |
Object.fromEntries(pares) | Crea un objeto desde pares | Inverso de entries |
5.Acceso seguro: ?. y ??
Si pides una propiedad de algo que no existe (undefined o null), JavaScript lanza un error. El encadenamiento opcional ?. lo evita:
💡 Consejo · Combina ?. y ??
?. devuelve undefined si algo en la cadena falta, y ?? aporta un valor por defecto solo para null/undefined. Son muy útiles con datos que llegan de internet, donde nunca sabes qué campos faltan.
6.JSON: el formato de intercambio
JSON (*JavaScript Object Notation*) es un formato de texto para intercambiar datos entre programas. Se parece a un objeto de JavaScript, con reglas más estrictas: las claves y los textos van entre comillas dobles y no admite funciones ni undefined.
| Función | Hace | Ejemplo |
|---|---|---|
JSON.stringify(valor) | Convierte un valor a texto JSON | JSON.stringify({a: 1}) → '{"a":1}' |
JSON.parse(texto) | Convierte texto JSON en un valor | JSON.parse('{"a":1}') → {a: 1} |
📌 Nota · Para qué sirve
JSON es el formato en que casi todas las APIs devuelven datos y en que se guardan cosas en localStorage (lecciones 10 y 11). Un error de sintaxis en el texto hace que JSON.parse lance una excepción, así que se suele envolver en try…catch.
7.Arrays de objetos: el patrón más común
En la práctica, casi todos los datos son listas de objetos: usuarios, productos, tareas, mensajes. Y todo lo que aprendiste de arrays se aplica:
8.Un vistazo a las clases
Cuando necesitas crear muchos objetos con la misma forma y comportamiento, existen las clases: moldes para fabricar objetos.
📌 Nota · No son imprescindibles
Para empezar, funciones y objetos literales bastan para casi todo. Las clases te serán útiles más adelante, y las encontrarás en muchas bibliotecas. Con lo visto aquí ya puedes leerlas.
9.Errores frecuentes
- Confundir
.con[]:obj.clavebusca la propiedad literal «clave»;obj[clave]usa el valor de la variable. - Pensar que
consthace el objeto inmutable: solo impide reasignar la variable; puedes cambiar sus propiedades (Object.freezelo impide). - Copiar con
=esperando una copia:const b = a;apunta al mismo objeto. Usa{ ...a }ostructuredClone(a). - Usar una flecha como método y perder
this. - Leer una propiedad de
undefined: usa?.o comprueba antes. - Comparar objetos con
===: dos objetos distintos con el mismo contenido no son iguales. - JSON con comillas simples o con una coma final: no es válido.
- Olvidar la coma entre propiedades.
📒 Apuntes para llevar
- Un objeto agrupa datos relacionados en pares
clave: valor; se accede conobj.claveoobj["clave"]. - Una propiedad que es una función es un método;
thisapunta al objeto. Usa la sintaxis normal, no flechas, para métodos. - Atajos: propiedades abreviadas
{ nombre }, desestructuraciónconst { a, b } = objy spread{ ...obj, a: 1 }. Object.keys/values/entriesconvierten un objeto en arrays para recorrerlo.?.evita errores con valores que faltan y??aporta valores por defecto.JSON.stringifyyJSON.parseconvierten entre objetos y texto;structuredClonehace copias profundas.- Las listas de objetos son el formato más habitual de datos; los métodos de array funcionan igual.
- Los objetos se copian y comparan por referencia, no por contenido.
10.Glosario
| Término | Significado |
|---|---|
| Objeto | Conjunto de pares nombre–valor que describe una cosa. |
| Propiedad | Un par nombre–valor dentro de un objeto. |
| Método | Propiedad cuyo valor es una función. |
this | En un método, el objeto que lo llamó. |
| Desestructuración | Sacar propiedades de un objeto en variables: const { a } = obj. |
| JSON | Formato de texto para intercambiar datos. |
| Referencia | Dirección de un objeto: dos variables pueden apuntar al mismo. |
| Encadenamiento opcional | Operador ?. que evita errores si algo es null o undefined. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Cómo accedes a la propiedad cuyo nombre está en la variable clave?
Con corchetes se usa el valor de la variable; con punto, el nombre literal.
const a = { x: 1 }; const b = a; b.x = 2; ¿Cuánto vale a.x?
b y a apuntan al mismo objeto: los cambios se ven en ambos.
¿Cuál es una forma correcta de copiar un objeto de un solo nivel?
El spread crea un objeto nuevo con las mismas propiedades.
usuario?.direccion?.ciudad cuando direccion es null, devuelve…
El encadenamiento opcional corta la cadena y devuelve undefined.
¿Qué hace JSON.parse('{"a":1}')?
parse pasa de texto a valor; stringify hace lo contrario.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.