两者之间有什么区别
100 ^ 49; // = 85
和
Math.pow(100, 49); // = 1e+98
JavaScript返回不同的结果,我不知道为什么。
答案 0 :(得分:12)
^
不是JavaScript中的幂运算符,**
是(且仅在最近)。 ^
是按位异或。有关JavaScript运算符test app的更多信息。
如果将100**49
与Math.pow(100,49)
进行比较,则根据规范,应该没有区别;来自on MDN:
- 返回12.6.4中指定的对 base 和 exponent 应用**运算符的结果。
尽管这对当前的实现可能是正确的,也可能不是正确的,因为幂运算符还是很新的。例如,在我撰写本文时,Chrome的V8 JavaScript引擎针对100**49
和Math.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上,值相同(即使带有常量)。