Як користуватися додатковим ланцюжком у Node.js 12


17

Необов’язковий ланцюжок ( obj?.param1?.param2) здається чудовою особливістю, і я дуже хотів бачити його реалізованим і нарешті позбутися від вкладених ifs, довільних функцій і чого не для такої простої операції.

Але є проблема, вона не працює. Я оновив до Вузла 12, і я все ще отримую помилку:

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

або

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

В чому проблема?

Чи потрібно змінити якусь конфігурацію мови або завантажити бібліотеку, щоб увімкнути цю функцію? Або просто ще не вийшло?


2
Це в Stage 4. Node.js ще не підтримує це. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Шрідхар

Я шукав "nodejs null propagation" і спочатку не міг знайти це питання. Сподіваємось, цей коментар покращить пошук.
Казимир

Боюся, я не можу багато з цим зробити. Там є тег, але він не пов’язаний з Javascript і спричинить більше плутанини, ніж користі.
almarc

Відповіді:


17

Необов'язковий ланцюжок наразі не підтримується у Node.jsверсії 13, а нижче він буде підтримуватися з Node.jsверсії 14 та більшості браузерів під час його переміщення Stage 4. В даний час мало платформ підтримують його. Ви можете знайти список платформ, що підтримують необов'язкові ланцюги, за даним посиланням . Ви можете ввімкнути опціонально, використовуючи --harmonyпрапор.


10

Специфікація для додаткової функції ланцюгової тільки просуне на стадію 4 (Закінчено) на 22 грудня 2019 року . Вузол 12 вийшов ще до того, як специфікація була остаточною, і так це зробив і Вузол 13.

Згідно node.green , необов'язкове ланцюжок буде підтримуватися, починаючи з Вузла 14, але --harmonyпрапор все ще потребуватиме . (Схоже, це суперечить опису --harmonyпрапора Node - функції транспортування V8 не повинні вимагати прапор - тому я не впевнений, що з цим зробити.) Все-таки, потрібен він прапор чи ні, я б не хотів ' Не очікуйте, що цю функцію побачать до виходу Node 14 близько квітня 2020 року .

Якщо ви сьогодні хочете пограти з додатковим ланцюжком, найкраще скористатися TypeScript (який додав необов'язкове ланцюжок у версії 3.7 ) або препроцесор, як Babel .


10

Мені вдалося використати nodejs v13.7.0 з прапором --harmony.

вузол --гармонія myCode.js

Діна

невизначений

невизначений

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.