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) => 4
和 2 ** 2 => 4
【问题讨论】:
从四处搜索,似乎没有其他原因,只是看起来更好。还有可能使用**=
运算符。
【参考方案1】:
迟到了——我只是想补充一点,尽管这两种方式没有区别,但我最近意识到 Internet Explorer 不支持 **
求幂运算符,所以开发人员对其应用程序的广泛跨浏览器支持感兴趣,可能更愿意选择Math.pow(...)
而不是指数运算符。
【讨论】:
【参考方案2】:没有。正如您在 ES7 规范中看到的那样,Math.pow
和 **
exponentation operator 都将它们的参数/操作数转换为数字并使用 very same algorithm 来确定结果。
附录:随着 ES2020 中 BigInt 类型的引入,这种情况发生了变化,其值仅受运算符支持(包括 **
)但不支持 Math
对象。
【讨论】:
无前提是没有人在Math
或Math.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() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章