Math.pow(99, 99)
// 3.697296376497263e+197
99 ** 99
// 3.697296376497268e+197
结果的最后一位为什么不一样
Math.pow(99, 99)
// 3.697296376497263e+197
99 ** 99
// 3.697296376497268e+197
结果的最后一位为什么不一样
Math.pow()
是宿主环境提供的内置对象方法,因此总是运行时计算;当使用幂操作符 **
时,如果左右操作数都是固定数字,引擎会在编译阶段进行一项称为常量折叠(const folding)的优化技术,而两者在实现上存在一定的差异。可以使用如下方法验证:
Math.pow(99, 99) === 99 ** 99 // false
const a = 99
const b = 99
Math.pow(99, 99) === a ** b // true(使用变量会阻止引擎进行常量折叠优化,`**` 被转成了 `Math.pow()`,因此结果为 true)
详情可以参考这篇:https://segmentfault.com/a/11...
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
因为在JS当中,Number类型会有精度问题,会有一个安全整数的范围
https://developer.mozilla.org...