表现形式
number 类型的精度丢失
我们打开浏览器F12,输入17个8,查看返回值。
输入:88888888888888888
输出:88888888888888900
JSON.parse 中的精度丢失
同样在浏览器F12中
输入:JSON.parse('{"largeNumber":88888888888888888}')
输出:{largeNumber: 88888888888888900}
出现原因
这个 bug 的原因是 js 最多可以表示 的整数。
即 Number.``MAX_SAFE_INTEGER=9007199254740991
。
超过的值都会丢失精度。
解决方案
方案一:与后端约定,针对超长数字使用 string 类型传递
方案二:手动做 parse 解析
参考第三方库:json-bigint https://github.com/sidorares/json-bigint