线上问题:浏览器接口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是否在边界范围内,如下图: