JS: Objetos
Teoría: Objetos anidados
Cuando trabajamos con objetos en JavaScript, una propiedad puede ser cualquier cosa: un número, una cadena, un booleano... ¡o incluso otro objeto o un array! Esto nos permite modelar datos de manera estructurada y organizada. Veamos cómo funciona.
Crear objetos con propiedades anidadas
Imagina que tenemos un usuario con información como su nombre, edad, estado civil, una lista de amigos, sus hijos y la empresa donde trabaja. Esto lo podemos representar mediante un objeto en JavaScript:
El resultado al imprimir user será:
También podemos definir toda esta estructura directamente al crear el objeto:
Acceder a propiedades anidadas
Cuando trabajamos con objetos anidados o arrays dentro de un objeto, accedemos a los valores utilizando puntos (.) o corchetes ([]):
Imprimir Objetos Complejos
Cuando usamos console.log() en JavaScript, hay una limitación: si un objeto tiene propiedades anidadas muy profundas, en la consola solo veremos [Object] o [Array] en lugar del contenido real:
Para evitar esto, podemos usar JSON.stringify() para convertir el objeto en una cadena de texto y visualizarlo correctamente:
Verificando Propiedades Anidadas
A veces, necesitamos comprobar si una propiedad dentro de un objeto anidado existe antes de acceder a ella. Sin protección, intentar acceder a una propiedad que no existe puede generar un error:
Una solución tradicional sería usar una serie de verificaciones:
Pero esto es poco práctico. Afortunadamente, JavaScript ofrece maneras más eficientes.
Operador de Encadenamiento Opcional (?.)
El operador de encadenamiento opcional (?.) simplifica el acceso a propiedades anidadas sin necesidad de verificar cada nivel:
Gracias a este operador, si alguna propiedad en la cadena no existe, simplemente devuelve undefined en lugar de generar un error.
También funciona con claves dinámicas:
Operador de Fusión Nula (??)
El operador de fusión nula (??) permite establecer un valor por defecto cuando la propiedad no existe o es null o undefined:
Diferencia con el operador || (o lógico):
?? solo reemplaza valores null o undefined, mientras que || también considera false, 0 o "" (cadena vacía) como valores "falsos".
Usando get() de Lodash
Si estamos trabajando con datos muy anidados y claves dinámicas, una alternativa más limpia es la función _.get() de la biblioteca Lodash:
También acepta un array de claves:
Resumen
- En un objeto, las propiedades pueden contener otros objetos o arrays.
- Se accede a propiedades anidadas con
obj.prop.subpropoobj['prop']['subprop']. console.log(obj)tiene limitaciones con estructuras anidadas;JSON.stringify(obj, null, 2)ayuda a visualizar mejor el contenido.- Para evitar errores al acceder a propiedades anidadas, se pueden usar:
- El operador de encadenamiento opcional (
?.). - El operador de fusión nula (
??). - La función
_.get()de Lodash.
- El operador de encadenamiento opcional (
Completado
0 / 13