今天在Javascript求职面试中,一个 friend 被问到这个问题:
为什么++ a增加两次?
a = b = 9**17-2
++a
console.log(a-b) //Why is it 2 ?
最佳答案
这是因为该值大于Number.MAX_SAFE_INTEGER
,并且无法用IEEE754 double 数字精确表示(JS使用其数字表示格式)16677181699666566
是IEEE754 double 中的1101100111111110011101111001100010000001100101000011
且16677181699666568
是1101100111111110011101111001100010000001100101000100
您会看到二进制文件仍然相差一个,但它的精度不足以以人类可读的格式正确显示它。