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


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

维特丝(vetes)泡沫发蜡喷雾干胶定型弹力素羊毛卷男女保湿蓬松发胶 泡沫发蜡450ml+旅行装99ml
¥34.00
维特丝(vetes)一梳黑染发剂染发梳植物潮色显白遮盖白发自然清水纯黑发焗油男女梳炫彩 自然黑LW00
¥49.00
维特丝(vetes)染发笔遮白补染快速染发天然植物一次性染发棒 一次性染发棒黑色
¥46.00
维特丝 护发精油防毛躁清香玫瑰奇焕亮发干枯烫发卷发直发头发润发护发素男女士 滋养柔顺护发精油100ml
¥36.00