Por ejemplo, dado:
const foo = {name: 'john', age: 12} console.log(foo?.age); Dado lo anterior, estamos salvaguardando usando ? en caso de que foo no tenga la propiedad age pero cómo se puede hacer en la siguiente situación (si es posible):
const foo = {name: 'john', house: {color: 'white', garage: true }} console.log(foo['house']?['yard'] ¿Cómo acceder a una propiedad, dentro de la house de la propiedad que podría estar indefinida usando paréntesis?
Primero, tiene una gran comprensión del operador nulo seguro, cuando dice foo?.age no está salvaguardando el campo age sino el objeto foo en sí mismo, ejemplos:
{a: 2}?.age y {a: 2}.age devuelven lo mismo, no se arrojará ningún error en ambos casos, solo se devuelve el valor undefined .undefined?.age y undefined.age son diferentes, el primero devolverá undefined mientras que el segundo arrojará un error. Ahora, después de comprender de qué se trata el operador nulo seguro, para evitar que foo["house"] se lance porque foo podría no estar definido (no porque la propiedad de la casa no exista) simplemente use foo?.["house"] .
Si desea verificar la existencia de propiedad de la casa, puede hacer algo como esto:
if(foo?.["house"]){ // here house exists so it's safe to read its value using foo.house }O:
if(foo?.hasOwnProperty("house")){ // the same thing, safe to access foo.house }No se ve muy bien, pero es todo lo que tenemos.
const foo = {name: 'john', house: {color: 'white', garage: true }} console.log(foo['house']?.['yard'])