Нулевой оператор объединения не работает или не включен?

#javascript

Вопрос:

Я изучал, как установить переменную в javascript, и я узнал об операторе объединения Nullish (??) в одном из сообщений, которые я видел здесь.

Но теперь, когда я пытаюсь его использовать, я получаю эту ошибку:

 Unexpected token, expected ,
 

для этой строки:

 var oldBookScript = (localStorage.getItem(book.id) ?? newBookScript);
 

Я хочу, чтобы переменная oldBookScript имела значение localStorage.getItem(book.id) , но если оно равно нулю или пусто, я хочу, чтобы оно имело значение newBookScript

Нужно ли мне как-то его включать?

Спасибо!

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

1. это проект vanilla js или вы используете js-фреймворк, такой как react, vue и т. Д.

2. Какой браузер вы используете? Вы проверили таблицу совместимости ?

3. Для этой функции требуется современная среда выполнения JavaScript. Как вы тестировали свой код? В браузере? В Node.js?

4. @SkyeBoniwell это не имеет никакого отношения к React, это версия JavaScript.

5. вы уверены, что ошибка в этой строке?

Ответ №1:

Это синтаксическая конструкция, а это означает, что для выполнения кода с ее помощью вам необходимо находиться в среде, достаточно современной для ее поддержки.

Например, самые последние версии Node, Chrome и Firefox (среди прочих) будут нормально работать с вашим кодом, но более старые среды (например, IE11) будут вызывать синтаксическую ошибку.

В стандартных сценариях, учитывая его синтаксис, невозможно «включить» его в определенной среде — либо он поддерживается, либо нет. Обычный подход в этой ситуации состоит в том, чтобы использовать Babel для переноса исходного кода (который имеет весь современный синтаксис) до ES6 или ES5, чтобы устаревшие браузеры могли его понять.

Но если вы используете React, JSX вашего кода уже транспонируется. Самые современные версии приложения create-react поддерживают оператор объединения nullish. По возможности обновите приложение create-react-до более новой версии. Если у вас есть более ручная настройка, вам нужно будет убедиться, что ваш код переносится с помощью Babel, и использовать Babel 7.8.0 или более позднюю версию.

Смотрите эти документы от Babel об интеграции в React с помощью @babel/preset-react предустановки.