指数运算符 ^ 和 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**49
和Math.pow(100,49)
,根据规范,应该没有区别;来自 Math.pow
:
- 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 上,值是相同的(即使是常量)。
有什么区别:
100 ^ 49; // = 85
和
Math.pow(100, 49); // = 1e+98
JavaScript returns 不同的结果,我不知道为什么。
^
不是 JavaScript 中的求幂运算符,**
是(而且最近才出现)。 ^
是按位异或。更多关于 JavaScript 运算符 on MDN.
如果比较100**49
和Math.pow(100,49)
,根据规范,应该没有区别;来自 Math.pow
:
- 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 上,值是相同的(即使是常量)。