Javascript 如何在新浏览器中使用扩展JS语法

Javascript 如何在新浏览器中使用扩展JS语法,javascript,syntax,bigint,Javascript,Syntax,Bigint,我想编写一个JavaScript函数,在浏览器支持时使用新语法(bigint literal42n): <script type="text/javascript"> if (window.BigInt) FortyTwo = Function('return 42n;'); else FortyTwo = function () {return 42;}; </script> if(window.BigIn

我想编写一个JavaScript函数,在浏览器支持时使用新语法(bigint literal
42n
):

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

if(window.BigInt)
FortyTwo=函数('return 42n;');
其他的
FortyTwo=函数(){return 42;};
但报告说:

注意:不建议使用函数构造函数创建函数,因为它需要函数体作为字符串,这可能会阻止某些JS引擎优化,也可能导致其他问题

我的功能是CPU密集型的,所以我不希望由于缺乏“一些JS引擎优化”而导致性能损失。
我需要一些变通办法。
我可以将脚本分成两部分(第一部分在旧浏览器上会失败),但我怀疑这是最好的方法:

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

FortyTwo=函数(){return 42n;};
如果(!window.FortyTwo)FortyTwo=function(){return 42;};

包含使用新JS语法的脚本的首选方式是什么?

您可以使用和自动转换所有代码。有一些设置开销,但您可以这样编写所有代码:

警报(42n+22n)//64
通过这种方法,您可以获得大部分可用的新语法,甚至是尚未发布的语法


另一个选项-使用多边形填充

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

有时你不得不做出权衡。如果您需要使用
函数
构造函数来解决此问题,您将不得不在没有优化的情况下生活。如果性能是一个问题,您可以创建函数构造函数,返回函数,然后使用此。。这就是性能问题。不管怎样,它似乎对Chrome有效。事实上,给V8引擎足够的时间,几乎没有任何性能差异,如果有的话。我想涡轮风扇会在某个时刻启动。因此,简而言之,我会说,别担心。这不是OP真正想要的。@Keith那么他想要什么?简而言之,阅读问题。。他有一个CPU密集型的功能,他知道如何处理不同的浏览器。使用webpack&bigintpolyfill肯定不会有助于提高性能。事实上,这可能会让事情变得更糟:(@Keith,你认为更通用的方法有用吗?我的意思是,很明显,
return 42n
不会应用引擎优化。此外,如果这就是所有代码,它只会运行一次,所以忽略任何开销以及避免
eval()的建议)
。阅读OP的问题,
return 42n
只是一个简单的例子。因为他还说->
我的功能是CPU密集型的
。我同意一种更通用的方法,我使用babel进行传输,但对检测到的浏览器进行自定义编译。webpack最大的缺点是它如何退化为最差的浏览器支持。