天天看点

我修复的印象最深的一个bug:数据内有超长整数末尾变0

我修复的印象最深的一个bug:数据内有超长整数末尾变0

ajax请求的数据,参数完全正常,奇怪的问题是浏览器会把我传入的channelId的后两位的数据变00,造成了数据的错错错。这就是因为channelId的数据超长精度丢失,导致数据有误。

查找困难的过程是艰难的,解决的办法很简单:

axios请求

我修复的印象最深的一个bug:数据内有超长整数末尾变0

if (!baseStr || typeof baseStr != 'string') return;

var jsonData = null;

try {

jsonData = JSON.parse(baseStr);           

} catch (err){

return null;           

}

var needReplaceStrs = [];

loopFindArrOrObj(jsonData,needReplaceStrs);

needReplaceStrs.forEach(function (replaceInfo) {

var matchArr = baseStr.match(eval('/"'+ replaceInfo.key + '":[0-9]{15,}/'));
if (matchArr) {
  var str = matchArr[0];
  var replaceStr = str.replace('"' + replaceInfo.key + '":','"' + replaceInfo.key + '":"');
  replaceStr += '"';
  baseStr = baseStr.replace(str,replaceStr);
}           

});

var returnJson = null;

returnJson = JSON.parse(baseStr);           

}catch (err){

return null;           

return returnJson;

//遍历对象类型的

function getNeedRpStrByObj(obj,needReplaceStrs) {

for (var key in obj) {

var value = obj[key];
if (typeof value == 'number' && value > 9007199254740992){
  needReplaceStrs.push({key:key});
}
loopFindArrOrObj(value,needReplaceStrs);           

//遍历数组类型的

function getNeedRpStrByArr(arr,needReplaceStrs) {

for(var i=0; i<arr.length; i++){

var value = arr[i];
loopFindArrOrObj(value,needReplaceStrs);           

//递归遍历

function loopFindArrOrObj(value,needRpStrArr) {

var valueTypeof = Object.prototype.toString.call(value);

if (valueTypeof == '[object Object]') {

needRpStrArr.concat(getNeedRpStrByObj(value,needRpStrArr));           

if (valueTypeof == '[object Array]') {

needRpStrArr.concat(getNeedRpStrByArr(value,needRpStrArr));