#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 🙂