ECMAScript 2016 求幂运算符和 Math.pow() 之间的区别

Posted

技术标签:

【中文标题】ECMAScript 2016 求幂运算符和 Math.pow() 之间的区别【英文标题】:Difference between ECMAScript 2016 exponentiation operator and Math.pow() 【发布时间】:2016-10-02 17:47:52 【问题描述】:

相对于当前的Math.pow(),使用 ECMAScript 2016 exponentiation operator 有什么好处?也就是说,除了减少击键,还有什么区别

Math.pow(2, 2) => 42 ** 2 => 4

【问题讨论】:

从四处搜索,似乎没有其他原因,只是看起来更好。还有可能使用**= 运算符。 【参考方案1】:

迟到了——我只是想补充一点,尽管这两种方式没有区别,但我最近意识到 Internet Explorer 不支持 ** 求幂运算符,所以开发人员对其应用程序的广泛跨浏览器支持感兴趣,可能更愿意选择Math.pow(...) 而不是指数运算符。

【讨论】:

【参考方案2】:

没有。正如您在 ES7 规范中看到的那样,Math.pow** exponentation operator 都将它们的参数/操作数转换为数字并使用 very same algorithm 来确定结果。

附录:随着 ES2020 中 BigInt 类型的引入,这种情况发生了变化,其值仅受运算符支持(包括 **)但不支持 Math 对象。

【讨论】:

前提是没有人在MathMath.pow 上胡闹。 :-)【参考方案3】:

Math.pow(2,2) === 2**2; // FALSE

Math.pow(99,99);
99 ** 99;

结果:

3.697296376497263e+197

3.697296376497268e+197

【讨论】:

已修复。以bugs.chromium.org/p/v8/issues/detail?id=5848 为例

以上是关于ECMAScript 2016 求幂运算符和 Math.pow() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

矩阵快速求幂

矩阵快速求幂

进阶学习10:ECMAScript——ES2016ES2017新特性

ES7(2016)幂运算符**

2016年3月7日----Javascript的运算符

Python中的矩阵求幂