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

时间:2018-07-26 14:11:01

标签: javascript exponent

两者之间有什么区别

100 ^ 49; // = 85

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

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

1 个答案:

答案 0 :(得分:12)

^不是JavaScript中的幂运算符,**是(且仅在最近)。 ^是按位异或。有关JavaScript运算符test app的更多信息。

如果将100**49Math.pow(100,49)进行比较,则根据规范,应该没有区别;来自on MDN

  
      
  1. 返回12.6.4中指定的对 base exponent 应用**运算符的结果。
  2.   

尽管这对当前的实现可能是正确的,也可能不是正确的,因为幂运算符还是很新的。例如,在我撰写本文时,Chrome的V8 JavaScript引擎针对100**49Math.pow(100,49)返回的稍有不同结果:

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

大概随着实现的成熟,差异将得到解决。差异似乎由Math.pow覆盖。看来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上,值相同(即使带有常量)。