Me sorprendió mucho ver el siguiente comportamiento en Node 14.18.0:
> {}?.fun(); Uncaught TypeError: b?.fun is not a function > undefined?.fun(); undefined Entiendo por qué la primera declaración arroja un TypeError. {}?.fun no está undefined , por lo que no se puede llamar. Pero undefined?.fun también es undefined , entonces, ¿por qué se puede llamar sin lanzar? ¿Qué parte de la especificación ECMAScript define este comportamiento? ¿El grupo de trabajo de ECMAScript proporcionó alguna razón por la que debería funcionar de esta manera?
Durante el encadenamiento opcional, si el valor actual dentro de la cadena es null o undefined , la expresión se cortocircuita con un valor de retorno de undefined .
Esto está en los documentos oficiales :
El
?.El operador es como el.operador de encadenamiento, excepto que en lugar de causar un error si una referencia esnullish(nulloundefined), la expresión se cortocircuita con un valor de retorno deundefined. Cuando se usa con llamadas a funciones, devuelveundefinedsi la función dada no existe.
Dado que {} es un objeto real, sin un método llamado fun() , explota porque llamaste a una función que no existía.
Para solucionar su problema, deberá llamar a la función con encadenamiento opcional:
console.log(({})?.fun?.()); // undefined¿el trabajo de? y decir que posiblemente el valor es indefinido
normalmente se usa así en mecanografiado
console.log(myobj?.value ?? 'does not exist');en javascript "?" es inútil
"?" no hace nada, solo indica que el valor puede no estar definido, por lo que cuando coloca un objeto, devuelve un error porque esta propiedad no existe en su objeto, mientras que en javascript no definido simplemente ignora todo