关于浏览器接口Preview中的数值和postman中获取到的不一致问题

 

          线上问题:浏览器接口Preview中的数值和postman中获取到的不一致,preview中看到的值是另外一个值

  • 情况是这样的:
    前端调用接口,拿到的记录ID是18446744073709552000,查看后端日志或用postman调用接口,返回的ID是18446744073709551615,浏览器中将ID偷摸改掉了....
  • 解决方案:

          让后端把id转成string类型,就成功拿到了数据。

           后端网关用的.net core,统一处理,具体方案:Net Core 配置之long类型 前端精度丢失和时间格式设置

 

 

  • 分析原因:
    数据是拿到了,可是为什么id会变呢?既然postman能拿到正确的数据,那说明是浏览器的问题。
    查询资料后了解到:原来是浏览器响应数据时,对超长的long型数据进行自动转换而导致的精度丢失问题。
    那超长是多长?有没有一个边界呢?
    答案是:有的。
    我们可以通过ES6的 Number.MAX_SAFE_INTEGER 和Number.MIN_SAFE_INTEGER获取到上下边界,在这个范围内不会出现精度丢失问题。也可以直接同 Number.isSafeInteger() 来判断一个num是否在边界范围内,如下图:关于浏览器接口Preview中的数值和postman中获取到的不一致问题

 

上一篇:[Swift通天遁地]九、拔剑吧-(12)创建Preview-Transition图像预览界面


下一篇:图片放大镜效果