Node.js'de isteğe bağlı zincirleme nasıl kullanılır 12


17

İsteğe bağlı zincirleme ( obj?.param1?.param2) harika bir özellik gibi görünüyor ve gerçekten uygulandığını görmek ve sonunda iç içe ifs, keyfi işlevler ve böyle basit bir işlem için ne kurtulmak istedim.

Ama bir sorun var, işe yaramıyor. Düğüm 12'ye güncelledim ve hala bir hata alıyorum:

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

veya

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

Sorun nedir?

Bu özelliği etkinleştirmek için bazı dil yapılandırmasını değiştirmem veya bir kitaplık indirmem gerekiyor mu? Yoksa henüz çıkmadı mı?


2
İçinde Stage 4. Node.js bunu henüz desteklemiyor. developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Sridhar

'Nodejs null propagation' kelimesini aradım ve başlangıçta bu soruyu bulamadım. Umarım bu yorum aranabilirliği geliştirir.
Casimir

Korkarım bu konuda fazla bir şey yapamam. Bunun için bir etiket var, ancak Javascript ile ilgili değil ve iyi yapmaktan daha fazla karışıklığa neden olacak.
almarc

Yanıtlar:


17

Opsiyonel zincirleme şu anda desteklenmemektedir Node.jsondan desteklenecektir aşağıda sürümü 13 ve Node.jssürümü 14 ve tarayıcıların çoğu o taşınır olarak Stage 4. Şu anda, birkaç platform destekliyor, verilen bağlantıda isteğe bağlı zincirlemeyi destekleyen platformların listesini bulabilirsiniz . --harmonyBayrağı kullanarak isteğe bağlı etkinleştirebilirsiniz .


10

Opsiyonel zincirleme özelliği için Spec sadece terfi etti Sahne 4 (Bitmiş) üzerine , 2019 Aralık 22 . Düğüm 12 spesifikasyon sona ermeden önce çıktı - ve bu nedenle Düğüm 13 de öyle.

Node.green'e göre , Node 14'ten başlayarak isteğe bağlı zincirleme desteklenecektir, ancak yine de --harmonybayrağı gerektirecektir . (Bu, Düğümün --harmonybayrağı tanımlamasıyla çelişiyor gibi görünüyor - V8'in nakliye özellikleri bayrağı gerektirmiyor - bu yüzden ne yapacağından emin değilim.) Yine de, bir bayrağa ihtiyacı olsun ya da olmasın, t 2020 Nisan'ında Node 14 sürümüne kadar bu özelliği görmeyi beklemiyoruz .

Bugün isteğe bağlı zincirleme ile oynamak istiyorsanız, en iyi seçeneğiniz TypeScript ( sürüm 3.7'de isteğe bağlı zincirleme ekleyen ) veya Babel gibi bir önişlemci kullanmaktır .


10

Nodejs v13.7.0'ı --harmony bayrağıyla kullanabildim.

düğüm - harmony myCode.js

Dinah

Tanımsız

Tanımsız

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.