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

在请求一个接口获取数据时,发生了一件诡异的事情:
接口返回值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


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