Cómo usar el encadenamiento opcional en Node.js 12


17

El encadenamiento opcional ( obj?.param1?.param2) parece ser una gran característica y realmente quería verlo implementado y finalmente deshacerme de los if anidados, las funciones arbitrarias y lo que no es 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 no ha salido todavía?


2
Está adentro Stage 4. Node.js aún no admite esto. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
— Sridhar

Busqué 'propagación nula de nodejs' e inicialmente no pude encontrar esta pregunta. Esperemos que este comentario mejore la capacidad de búsqueda.
— Casimir

Me temo que no puedo hacer mucho al respecto. Hay una etiqueta para ello, pero no está relacionada con Javascript y causará más confusión que bien.
— almarc

Respuestas:


17

El encadenamiento opcional no se admite actualmente en la Node.jsversión 13 y, a continuación, se admitirá desde la Node.jsversión 14 y la mayoría de los navegadores a medida que se mueve Stage 4. Actualmente, pocas plataformas lo admiten. Puede encontrar la lista de plataformas que admiten el encadenamiento opcional en el enlace dado . Puede habilitar opcional usando la --harmonybandera.


10

La especificación para la función de encadenamiento opcional acaba de ser promovida a la Etapa 4 (Finalizada) el 22 de diciembre de 2019 . El nodo 12 salió antes de que la especificación fuera final, y también el nodo 13, para el caso.

De acuerdo con node.green , se admitirá el encadenamiento opcional a partir del Nodo 14, pero aún requerirá la --harmonybandera. (Esto parece estar en conflicto con la descripción de Node de la --harmonybandera ; se supone que las características de envío de V8 no requieren la bandera, así que no estoy seguro de qué hacer con eso). Sin embargo, si necesita una bandera o no, no lo haría. No espere ver la función hasta el lanzamiento del Nodo 14 alrededor de abril de 2020 .

Si quieres jugar con el encadenamiento opcional hoy, tu mejor opción es usar TypeScript (que agregó el encadenamiento opcional en la versión 3.7 ) o un preprocesador como Babel .


10

Pude usar nodejs v13.7.0 con --harmony flag.

nodo --harmony myCode.js

Dinah

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(catName);
//expected output: undefined

console.log(adventurer.someNonExistentMethod?.())
//expected output: undefined

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.