当前位置: 首页 > Web前端 > vue.js

填坑系列-js处理后台返回大数

时间:2023-04-01 12:57:38 vue.js

js处理后台返回大数后台是这样的,后台返回一个大于16位的数字,前端接收数据自动转换多余的尾数JavaScript中的01188726131910512635=>1188726131910512000Number的基本数据类型是双精度浮点数。它能表示的最大安全范围是正负9007199254740991,即2的53次方减一。超出安全范围的任何数字都可能会失去精度。Number.MAX_SAFE_INTEGER9007199254740991解决方案将接收到的数据转化为文本,数字内容通过正则匹配,转化为JSON的字符串。Parse以Axios为例。then(res=>{#发现接收到的res已经被js转换过了,不可行//dosomethingreturnres.data})由于接收到的res已经被转换了,可以考虑将接收状态改为text方式:'get',url:'',responseType:'text'#还没有生效,所以get还是一个对象。我无意中看到了transformResponse属性。Axios文档解释了transformResponse允许在将响应数据传递给then/catch之前对其进行修改transformResponse:[function(data){#对数据返回数据进行任意转换处理;}],完美解决了大数的问题。transformResponse:[config=>JSON.parse(config.replace(/(?<=someNo":)(\d{0,})/g,'"$1"'))]当然,处理大数本身就是JSWeaknesses,以上方法虽然可以解决问题,但是不推荐,如果遇到复杂的正则匹配问题,可能要跪了,这类问题尽量从服务端解决。