Come utilizzare il concatenamento opzionale in Node.js 12


17

Il concatenamento opzionale ( obj?.param1?.param2) sembra essere una grande funzionalità e volevo davvero vederlo implementato e finalmente sbarazzarmi di if annidati, funzioni arbitrarie e cosa non per un'operazione così semplice.

Ma c'è un problema, non funziona. Ho aggiornato al nodo 12 e continuo a ricevere un errore:

var dude = res?.param?.params[0]
SyntaxError: Unexpected token '.'

o

var dude = res.param?.params[0]
SyntaxError: Unexpected token '.'

Qual è il problema?

Devo cambiare la configurazione della lingua o scaricare una libreria per abilitare questa funzione? O semplicemente non è ancora uscito?


2
È dentro Stage 4. Node.js non supporta ancora questo. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Sridhar

Ho cercato la "propagazione nulla di nodejs" e inizialmente non sono riuscito a trovare questa domanda. Spero che questo commento possa migliorare la ricerca.
Casimir

Temo di non poter fare molto al riguardo. C'è un tag per questo, ma non è correlato a Javascript e causerà più confusione che benefici.
almarc

Risposte:


17

Il concatenamento opzionale non è attualmente supportato nella Node.jsversione 13 e inferiore sarà supportato dalla Node.jsversione 14 e dalla maggior parte dei browser quando viene spostato Stage 4. Attualmente, poche piattaforme lo supportano, puoi trovare l'elenco delle piattaforme che supportano il concatenamento opzionale nel link indicato . È possibile abilitare facoltativo utilizzando --harmonyflag.


10

Le specifiche per la funzione di concatenamento opzionale sono state appena promosse alla Fase 4 (terminata) il 22 dicembre 2019 . Il nodo 12 è uscito prima che le specifiche fossero definitive, e così pure il nodo 13, del resto.

Secondo node.green , il concatenamento opzionale sarà supportato a partire dal Nodo 14, ma richiederà comunque il --harmonyflag. (Questo sembra essere in conflitto con la descrizione della --harmonybandiera di Node - le funzionalità di spedizione di V8 non dovrebbero richiedere la bandiera - quindi non sono sicuro di cosa farne.) Tuttavia, che abbia bisogno di una bandiera o no, non vorrei Non mi aspetto di vedere la funzione fino alla versione del Nodo 14 intorno ad aprile 2020 .

Se vuoi giocare con il concatenamento opzionale oggi, la soluzione migliore è usare TypeScript (che ha aggiunto il concatenamento opzionale nella versione 3.7 ) o un preprocessore come Babel .


10

Sono stato in grado di utilizzare nodejs v13.7.0 con --harmony flag.

nodo --harmony myCode.js

Dinah

non definito

non definito

//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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.