所以我发现了这个:
let number = -1234;
console.log(number.toPrecision(3)); // -1.23e+3
console.log(-1234..toPrecision(3)); // -1230

任何人都可以解释到底发生了什么?我唯一能想到的是,在第二种情况下,优化器预先计算表达式,并且优化器的toPrecision
实现与编译器不同。
经过测试:
编辑:回复:由小数点触发,很好的观察 - 但是,如果我们将小数点加到number
中,它就不会突然去指数化:
let number = -1234.5;
console.log(number.toPrecision(3)); // -1.23e+3
console.log(-1234.5.toPrecision(3)); // -1230

答案 0 :(得分:6)
这是与运营商优先权相关的问题。
添加括号后,您的表达式将如下:
(-1234).toPrecision(3) // "-1.23e+3"
-(1234..toPrecision(3)) // -1230
首先计算 1234..toPrecision(3)
,即"1.23e+3"
然后表达式变为-"1.23e+3"
,即-1230
。