为什么 Number("x") == BigInt("x") ... 只有在某些情况下成立?
- 论坛
- 为什么 Number("x") == BigInt("x") ... 只有在某些情况下成立?
10 浏览
为什么 Number("x") == BigInt("x") ... 只有在某些情况下成立?
我认为JavaScript的松散相等运算符对于比较数字和BigInts非常友好:
42 == 42n // true!
所以我尝试了一个比Number.MAX_SAFE_INTEGER
更大的数字。我觉得既然数字会自动四舍五入,我可能也需要将BigInt四舍五入以使它们被视为相等:
9999999999999999 == 10000000000000000 // true - 被四舍五入为float64 9999999999999999 == 9999999999999999n // false - 合理! 10000000000000000 == 9999999999999999n // false - 合理! 9999999999999999 == 10000000000000000n // true - 合理!
太好了,很合理 - 所以我尝试了另一个四舍五入的大数字:
18446744073709551616 == 18446744073709552000 // true - 被四舍五入为float64 18446744073709551616 == 18446744073709551616n // true?! 18446744073709552000 == 18446744073709551616n // true?! 18446744073709551616 == 18446744073709552000n // false?!
我在Chrome、Safari和Node.js中观察到了相同的结果。
为什么这种行为不一致呢?是因为这些数字是作为数学值进行比较的,这是什么意思呢?