asmdxx

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

响应与预览数据不一样?有趣问题记录

接口:admin/sysbusdict/page?current=1&size=20
Preview 中的 data.records 中的数组数据存在的 id 和 Response 的id 不一样。

image
image
排除:后端排除数据返回错误,前端排除引错或路径数据问题
再看数据 id = 2038450745270865922 进一步直观查看 2,038,450,745,270,865,922 -> 2 百万亿(即 2 亿亿)
在前端代码中,data() 仅有一位数组,里面的每个对象的没有去定义是 string 还是 number,直接拿接口返回的数据 this.tableData = response.data.data.records;
image
前端默认把后端响应 JSON 解析成前端对象,就把它当成了 JS 的 number,在这一步丢失精度了。
JS 的 Number 用的是 IEEE 754 双精度浮点数,Number 只有 53 位有效精度。其中1位隐含,所以整数能精确表示的范围是-(253-1)到253 -1 也就是2,038,450,745,270,865,922
即,Number.MAX_SAFE_INTEGER = 2⁵³ − 1,即 9,007,199,254,740,991
直观对比:
9,007,199,254,740,991
2,038,450,745,270,865,922 比 2⁵³ − 1 大约 226 倍
总结:后端返回 JSON 中 id 类型由接口响应解析结果决定,之前按照默认 Number 解析超大整数丢失精度。
解决方式:利用json-bigint处理大数字[溢出]问题,axios文件中进行配置。
搜索配置资料:
https://juejin.cn/post/7002489417088630821

posted on 2026-04-13 17:41  asmdxx  阅读(1)  评论(0)    收藏  举报