Entonces, estoy leyendo el encadenamiento opcional en JavaScript y me surge una pregunta.
Considere el siguiente código:
let person = null let street = person?.street // returns undefined Mi pregunta es que, si la variable person es null para empezar, ¿por qué se está haciendo un resultado de encadenamiento opcional para establecer la variable como undefined y no null ?
Si la persona no estaba undefined , entonces supongo que, para mí, establecerla en undefined es razonable porque la variable, por supuesto, no está undefined , como la siguiente:
let person let street = person?.street // returns undefinedPD: Lo siento si esta es una pregunta estúpida, la eliminaré si alguien está de acuerdo. :)
PPS: si esta pregunta está duplicada, suelte el enlace y lo intentaré. Muchísimas gracias.
Una cadena opcional no se evalúa como el valor nulo en el que se accedió a la propiedad, sino como undefined , al igual que obtienes undefined cuando una propiedad no existe en un objeto.
Conceptualmente, ¿piense en person?.street no como
person && person.streetsino más bien como
(person ?? {}).streetAunque con precisión (especialmente cuando se encadena más, ya que provoca un cortocircuito en lugar de evaluar el resto de la cadena) es realmente
person != null ? person.street : undefinedConsulte también las preguntas frecuentes sobre la propuesta de encadenamiento opcional :
¿Por qué
(null)?.bse evalúa comoundefineden lugar denull?Ni
abnia?.bpretenden preservar información arbitraria sobre el objeto basea, sino solo brindar información sobre la propiedad"b"de ese objeto. Si una propiedad"b"está ausente dea, esto se refleja enab === undefinedya?.b === undefined.En particular, se considera que el valor
nullno tiene propiedades; por lo tanto,(null)?.bno estáundefined.
La razón por la que el resultado no está undefined y no es null se debe al encadenamiento opcional ( ?. ).
Si el encadenamiento opcional no estuviera disponible, su código habría resultado en un error, diciendo que null no tiene propiedades.
const person = null; person.street // ERROR! Pero, dado que tiene un encadenamiento opcional, solo da como resultado undefined .
const person = null; person?.street // undefined Esta es la razón por la que el encadenamiento opcional da como resultado undefined (si el valor es null o undefined ); para evitar arrojar un error!
¡Espero que esto haya respondido a tu pregunta!
Lea el manual sobre el encadenamiento opcional .
Los ?. El operador es como el . operador de encadenamiento, excepto que en lugar de causar un error si una referencia es
nullish(nulloundefined), la expresión se cortocircuita con un valor de retorno deundefined. Cuando se usa con llamadas a funciones, devuelve indefinido si la función dada no existe.