Как использовать расширенный синтаксис JS, доступный в новых браузерах - PullRequest
0 голосов
/ 15 марта 2020

Я хочу написать функцию JavaScript, которая использует новый синтаксис (литерал bigint 42n), когда браузер поддерживает его:

  <script type="text/javascript">
     if (window.BigInt)
        FortyTwo = Function('return 42n;');
     else
        FortyTwo = function () {return 42;};
  </script>

Но документация гласит:

Примечание. Использование конструктора функций для создания функций не рекомендуется, поскольку для него требуется тело функции в виде строки, которая может предотвратить некоторые JS оптимизации движка и может вызвать другие проблемы.

Моя функция интенсивно использует процессор, поэтому я не хочу потери производительности из-за отсутствия "некоторых JS оптимизаций движка".
Мне нужен обходной путь.
Я могу разделить скрипт на две части ( первый не удастся использовать в старых браузерах), но я сомневаюсь, что это лучший способ:

  <script type="text/javascript">
     FortyTwo = function () {return 42n;};
  </script>
  <script type="text/javascript">
     if (!window.FortyTwo) FortyTwo = function () {return 42;};
  </script>

Каков предпочтительный способ включения сценария, использующего новый синтаксис JS?

1 Ответ

0 голосов
/ 15 марта 2020

Вы можете автоматически преобразовать весь свой код, используя webpack , babel и кросс-браузер . Существуют некоторые накладные расходы на установку, но вы можете написать весь свой код следующим образом:

alert(42n + 22n) // 64

Вы получаете большую часть нового синтаксиса, доступного с этим подходом, и даже синтаксис, который еще не готов к выпуску.


Другой вариант - использовать полифилл

<script src="https://cdnjs.cloudflare.com/ajax/libs/big-integer/1.6.48/BigInteger.js"></script>

, а затем написать весь свой код следующим образом

alert(BigInt(42) + BigInt(2)) // 44
...