项目场景:
项目中用到json数据,发现一个id值发生改变的现象
问题描述
项目中发现chrome网络中response中数据中的id字段,使用preview后,id发生了改变,其中的1871035498797469698变成了1871035498797469700。
使用edge和firefox,换机器结果类似,都发生了改变。
原因分析:
写了一个简单的js用例,发现只要经过json转化都会发生变化。怀疑是整形溢出,将id改成字符串,没有发生此现象
解决方案:
使用通义千问确认,得到答案:
JavaScript 中数字的精度限制所导致的。JavaScript 使用 IEEE 754 标准中的双精度64位浮点数来表示所有的数字,这意味它能够准确表示的整数范围是 -2^53 到 2^53 之间(即 ±9007199254740992)。
当你尝试解析一个超过这个安全整数范围的数值时,可能会因为浮点数的舍入误差而导致数值不精确。在你的例子中,原始ID 1871035498797469698 超过了 2^53 - 1,因此当通过 JSON.parse 解析时,会自动调整到最接近的可表示值,这就是为什么你会看到 1871035498797469700