El encadenamiento opcional ( obj?.param1?.param2 ) parece ser una gran característica y realmente quería verlo implementado y finalmente deshacerme de ifs anidados, funciones arbitrarias y demás para una operación tan simple.
Pero hay un problema, no funciona. Actualicé al Nodo 12 y sigo recibiendo un error:
var dude = res?.param?.params[0] SyntaxError: Unexpected token '.'o
var dude = res.param?.params[0] SyntaxError: Unexpected token '.'¿Cuál es el problema?
¿Necesito cambiar alguna configuración de idioma o descargar una biblioteca para habilitar esta función? ¿O simplemente aún no ha salido?
Actualmente, el encadenamiento opcional no es compatible con la versión 13 de Node.js y versiones anteriores. Será compatible con la versión 14 de Node.js y la mayoría de los navegadores a medida que se mueva a la Etapa 4. Actualmente, pocas plataformas lo admiten. Puede encontrar la lista de plataformas que admiten el encadenamiento opcional en el enlace proporcionado. Puede habilitar opcional usando la --harmony .
La especificación para la función de encadenamiento opcional acaba de ascender a la Etapa 4 (Terminada) el 22 de diciembre de 2019 . El Nodo 12 salió antes de que la especificación fuera definitiva, y también el Nodo 13, para el caso.
De acuerdo con node.green , el encadenamiento opcional será compatible a partir del Nodo 14, pero seguirá siendo necesario el indicador --harmony . (Esto parece entrar en conflicto con la descripción de Node de la bandera --harmony ; se supone que las funciones de envío de V8 no requieren la bandera, así que no estoy seguro de qué hacer con eso). Aún así, ya sea que necesite una bandera o no, No esperaría ver la función hasta el lanzamiento de Node 14 alrededor de abril de 2020 .
Si quiere jugar con encadenamiento opcional hoy, su mejor opción es usar TypeScript (que agregó encadenamiento opcional en la versión 3.7 ) o un preprocesador como Babel .
Pude usar nodejs v13.7.0 con el indicador --harmony.
nodo --harmony myCode.js
Dina
indefinido
indefinido
//myCode.js const adventurer = { name: 'Alice', cat: { name: 'Dinah' } }; const catName = adventurer.cat?.name; console.log(catName); // expected output: Dinah const dogName = adventurer.dog?.name; console.log(dogName); //expected output: undefined console.log(adventurer.someNonExistentMethod?.()) //expected output: undefined