前端JavaScript解析Long类型数据有误,Chrome上preview与response标签显示结果不一致

文石BOOX快刷阅读平板 Tab8 7.8英寸智能办公本电子书阅读器 墨水屏电纸书 语音转文字 保护套套装 4+64G >> 限时秒杀¥2818.00

在请求一个接口获取数据时,发生了一件诡异的事情:
接口返回值id字段为long类型,但是在控制台上看接口返回值时,preview与response标签下两个值不一样

preview标签下会解析成json格式查看,这个值是错误的。
response标签下是接口原始返回值,这个值是对的。

经过排查,发现是语言间精度的问题,原因是:由于JavaScript中Number类型自身的原因,并不能完全表示Long型的数字,在Long长度大于17位时会出现精度丢失的问题。

问题复现:
我们直接在java中使用Long.MAX_VALUE获取Long类型的最大值,结果为:

9223372036854775807

然后打开Chrome浏览器,打开控制台,切换到console标签页,直接执行如下语句:

console.log(9223372036854775807)

其实直接粘贴9223372036854775807也能看到效果

可以看到,数值已经错了。

解决办法:
1、后端对于Long类型使用String字符串输出
2、前端支持Long类型,参考:https://segmentfault.com/a/1190000009599204

珀莱雅(PROYA) 爽肤水护肤品女化妆水补水保湿深层滋润精华柔肤细致毛孔教师节礼物送女友 紧致肌密凝时滋养水150ml >> 限时秒杀¥117.00

觉得内容还不错?打赏个钢镚鼓励鼓励!!👍