前端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

支付宝搜索:344355 领取随机红包

如果文章对您有帮助的话,欢迎老板打赏↑↑↑(请我吃饭😋