【问题标题】:Difference between Exponent operator ^ and Math.pow()指数运算符 ^ 和 Math.pow() 之间的区别
【发布时间】:2018-07-26 14:11:01
【问题描述】:

有什么区别:

100 ^ 49; // = 85

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

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

【问题讨论】:

  • 指数运算符是**100**49

标签: javascript exponent


【解决方案1】:

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

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

  1. 返回使用 12.6.4 中指定的 baseexponent 应用 ** 运算符的结果。

不过,目前的实现可能是这样,也可能不是,因为求幂运算符还是很新的。例如,在我写这篇文章的时候,Chrome 的 V8 JavaScript 引擎为 100**49Math.pow(100,49) 返回非常略有不同的结果:(编辑:截至 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 上,这些值是相同的(即使是常量)。

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2011-05-24
    • 2016-05-18
    • 2011-10-22
    • 2012-10-06
    • 2010-12-30
    • 2019-08-29
    相关资源
    最近更新 更多