Jak korzystać z opcjonalnego łączenia w Node.js 12


17

Opcjonalne łączenie w łańcuchy ( obj?.param1?.param2) wydaje się być świetną funkcją i naprawdę chciałem zobaczyć, jak zostało zaimplementowane i wreszcie pozbyć się zagnieżdżonych ifs, dowolnych funkcji i co nie dla tak prostej operacji.

Ale jest problem, to nie działa. Zaktualizowałem do Węzła 12 i nadal pojawia się błąd:

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

lub

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

Jaki jest problem?

Czy muszę zmienić konfigurację języka lub pobrać bibliotekę, aby włączyć tę funkcję? A może po prostu jeszcze tego nie ma?


2
To jest w Stage 4. Node.js jeszcze tego nie obsługuje. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
— Sridhar

Szukałem „propagacji nodejs null” i początkowo nie mogłem znaleźć tego pytania. Mam nadzieję, że ten komentarz poprawi możliwości wyszukiwania.
— Casimir

Obawiam się, że niewiele mogę na to poradzić. Jest tam tag, ale nie jest on związany z Javascriptem i spowoduje więcej zamieszania niż czynienia dobra.
— almarc

Odpowiedzi:


17

Opcjonalne łączenie łańcuchowe nie jest obecnie obsługiwane w Node.jswersji 13, a poniżej będzie obsługiwane w Node.jswersji 14 i większości przeglądarek w miarę przenoszenia Stage 4. Obecnie kilka platform obsługuje tę funkcję. Listę platform obsługujących opcjonalne tworzenie łańcuchów można znaleźć w podanym linku . Możesz włączyć opcjonalne za pomocą --harmonyflagi.


10

Spec dla opcjonalnej funkcji łańcuchowym właśnie awansował do etapu 4 (końcowy) na 22 grudnia 2019 r . Węzeł 12 pojawił się przed końcem specyfikacji - podobnie zresztą jak Węzeł 13.

Według node.green opcjonalne łączenie łańcuchów będzie obsługiwane począwszy od Węzła 14, ale nadal będzie wymagało --harmonyflagi. (Wydaje się, że jest to sprzeczne z opisem --harmonyflagi Node - funkcje wysyłki V8 nie powinny wymagać flagi - więc nie jestem pewien, co z tego zrobić.) Mimo to, czy potrzebuje flagi, czy nie, nie chciałbym spodziewamy się zobaczyć tę funkcję do czasu wydania Node 14 około kwietnia 2020 r .

Jeśli chcesz dzisiaj grać z opcjonalnym łańcuchem, najlepszym rozwiązaniem jest użycie TypeScript (który dodał opcjonalny łańcuch w wersji 3.7 ) lub preprocesora takiego jak Babel .


10

Byłem w stanie używać nodejs v13.7.0 z flagą --harmony.

węzeł --harmony myCode.js

Dina

nieokreślony

nieokreślony

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.