Как использовать необязательную цепочку в Node.js 12 .

#javascript #node.js

#javascript #node.js

Вопрос:

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

Но есть проблема, это не работает. Я обновился до узла 12, и я все еще получаю сообщение об ошибке:

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

или

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

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

Нужно ли мне изменить некоторые языковые настройки или загрузить библиотеку, чтобы включить эту функцию? Или это просто еще не вышло?

Комментарии:

1. Он находится внутри Stage 4 . Node.js пока это не поддерживается. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…

2. Я искал «nodejs null propagation» и изначально не мог найти этот вопрос. Надеюсь, этот комментарий улучшит поиск.

3. Боюсь, я мало что могу с этим поделать. Для этого есть тег, но он не связан с Javascript и вызовет больше путаницы, чем пользы.

4. Необязательная цепочка теперь поддерживается в версии узла v14.2.0. Обновление!

Ответ №1:

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

Комментарии:

1. Январь 2021: это все еще проблема на веб-сайте codesandbox, который использует официальный образ docker для nodejs. Мне пришлось использовать result amp;amp; result.insertedCount === 1 ? { data: "success" } : { error: "fail" }

2. Если вы используете esm, необязательная цепочка не будет работать на узле 14 , пока этот билет не будет исправлен github.com/standard-things/esm/issues/866

Ответ №2:

Спецификация для дополнительной функции цепочки была только что повышена до стадии 4 (завершена) 22 декабря 2019 года. Узел 12 появился до того, как спецификация была окончательной — и, если на то пошло, узел 13 тоже.

Согласно node.green, необязательная цепочка будет поддерживаться, начиная с узла 14, но для нее все равно потребуется --harmony флаг. (Кажется, это противоречит описанию --harmony флага Node — функции доставки V8 не должны требовать флага, поэтому я не уверен, что с этим делать.) Тем не менее, нужен ли ему флаг или нет, я бы не ожидал увидеть эту функцию до выпуска Node 14примерно в апреле 2020 года.

Если вы хотите поиграть с необязательной цепочкой сегодня, лучше всего использовать TypeScript (который добавил необязательную цепочку в версии 3.7) или препроцессор, такой как Babel.

Ответ №3:

Я смог использовать nodejs версии 13.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(dogName);
//expected output: undefined

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

Ответ №4:

Необязательная цепочка будет реализована с Node.js v14, который будет выпущен 20/04/2020. К настоящему времени вы можете использовать Babel с помощью @babel/plugin-proposal-optional-chaining .

Ответ №5:

Если у вас все еще возникает эта проблема, проверьте версию узла, которую вы используете node --version .

Если у вас есть nvm , убедитесь, что вы используете версию узла, которая реализует оператор, выдающий ошибку.

например

 nvm install 15.8
nvm use 15.8
  

Комментарии:

1. OP спросил, как использовать его в узле 12, а не как установить узел 15.8.

2. предложение состояло в том, чтобы, если у OP все еще была проблема, проверить версию узла и при необходимости изменить ее с помощью nvm 🙂