`toPrecision`和文字

时间:2017-07-13 02:03:01

标签: javascript

所以我发现了这个:



let number = -1234;
console.log(number.toPrecision(3)); // -1.23e+3
console.log(-1234..toPrecision(3)); // -1230




任何人都可以解释到底发生了什么?我唯一能想到的是,在第二种情况下,优化器预先计算表达式,并且优化器的toPrecision实现与编译器不同。

经过测试:

  • Safari / Mac,版本10.1(12603.1.30.0.34)
  • Chrome / Mac,版本59.0.3071.104(官方版本)(64位)
  • Firefox / Mac,54.0.1(64位)

编辑:回复:由小数点触发,很好的观察 - 但是,如果我们将小数点加到number中,它就不会突然去指数化:



let number = -1234.5;
console.log(number.toPrecision(3));  // -1.23e+3
console.log(-1234.5.toPrecision(3)); // -1230




1 个答案:

答案 0 :(得分:6)

这是与运营商优先权相关的问题。

添加括号后,您的表达式将如下:

(-1234).toPrecision(3)  // "-1.23e+3"
-(1234..toPrecision(3)) // -1230
首先计算

1234..toPrecision(3),即"1.23e+3" 然后表达式变为-"1.23e+3",即-1230