指数运算符 ^ 和 Math.pow() 之间的区别

Difference between Exponent operator ^ and Math.pow()

有什么区别:

100 ^ 49; // = 85

Math.pow(100, 49); // = 1e+98

JavaScript returns 不同的结果,我不知道为什么。

^ 不是 JavaScript 中的求幂运算符,** 是(而且最近才出现)。 ^ 是按位异或。更多关于 JavaScript 运算符 on MDN.

如果比较100**49Math.pow(100,49),根据规范,应该没有区别;来自 Math.pow:

  1. Return the result of Applying the ** operator with base and exponent as specified in 12.6.4.

不过,目前的实现可能是这样,也可能不是这样,因为求幂运算符还是很新的。例如,在我撰写本文时,Chrome 的 V8 JavaScript 引擎 returns 100**49 和 [=] 的结果略有不同 16=]:(编辑:截至 2020 年 8 月 26 日,它们的结果相同。)

console.log(100**49);
console.log(Math.pow(100,49));

据推测,随着实施的成熟,​​差异将得到解决。 this issue 似乎涵盖了差异。 100*49 似乎是在编译时评估的(因为两个值都是常量),而 Math.pow 当然是在运行时评估的,显然算法并不相同。

如果使用变量,**Math.pow 一致:

let a = 100;
console.log(a**49);
console.log(Math.pow(a,49));
console.log(a**49 === Math.pow(a, 49));

在 Firefox 和 Edge 上,值是相同的(即使是常量)。