今天在一次 JavaScript 面试中,我的朋友被问到了这个问题:
为什么 ++a 会使 a 的值增加两次?
为什么 ++a 会使 a 的值增加两次?
a = b = 9**17-2
++a
console.log(a-b) //Why is it 2 ?
a = b = 9**17-2
++a
console.log(a-b) //Why is it 2 ?
这是因为该值大于Number.MAX_SAFE_INTEGER
,无法使用IEEE754双精度数字(JS使用它作为数字表示格式)准确表示。
16677181699666566
在IEEE754双精度中表示为1101100111111110011101111001100010000001100101000011
16677181699666568
在IEEE754双精度中表示为1101100111111110011101111001100010000001100101000100
你可以看到二进制仍然相差一位,但这不足以以人类可读的格式正确显示它。
0
。 - Eugene Tsakh