所以我刚发现这个:
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
最佳答案
这是一个与运算符优先级相关的问题。
添加括号后,您的表达式将如下所示:
(-1234).toPrecision(3) // "-1.23e+3"
-(1234..toPrecision(3)) // -1230
1234..toPrecision(3)
先计算出来,就是"1.23e+3"
。
那么表达式就变成了-"1.23e+3"
,也就是-1230
。
关于javascript - `toPrecision` 和文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070271/