后端返回long類型長度超出瀏覽器限制導(dǎo)致JS精度缺失啄踊,瀏覽器自動把超出部分用0表示解決方案

1.后端把返回值的字段減少一點
2.后端把返回值轉(zhuǎn)成String類型,然后接收的時候把String類型轉(zhuǎn)回long類型

但是1有場景限定
對于1來說 項目已經(jīng)上線的話字段更改代價比較大脉课,所以需要用到2方法
但是2方法對于前端來說有時候也并不是那么的好用
盡管后端返回的是字符串因為請求返回的時候會用JSON.parse(response)來解析后端返回的字符串這個時候就涼涼了啤月,那么有辦法解決嗎?有的嫉髓,不多CC直接上方法观腊。

對接收的值作處理
const res = getRealJsonData(response.request.responseText); //直接放要解析的json字符串
function getRealJsonData(baseStr) {
    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;
    try {
        returnJson = JSON.parse(baseStr);
    } catch (err) {
        return null;
    }
    return returnJson;
}
遍歷數(shù)組類型
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));
    }
}
遍歷對象類型
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);
    }
}
瀏覽器精度測試
let num = 1616161616161616, num1 = 17171717171717171, num2 = 181818181818181818;
// 打印結(jié)果
num: 1616161616161616 // 沒有變化,還頂?shù)米?num1: 17171717171717172 // 結(jié)果好像只是+1了
num2: 181818181818181820 // 結(jié)果好像+2了

// 經(jīng)過一系列的測試在17位的時候原數(shù)值有時候會+1算行,有時候不變梧油,不知道什么情況。州邢。儡陨。18位最后一位永遠是0,倒數(shù)第二位好像沒有規(guī)律可言量淌,測試半天沒發(fā)現(xiàn)什么規(guī)律

總結(jié)

使用這個方法可以在轉(zhuǎn)義之前把精度會缺失的字符串在外面再包一層字符串 像這樣子 '"111111111111111111"'骗村,這樣子在解析的時候就能避免瀏覽器在使用JSON.parse()方法的時候把后端返回的字符串轉(zhuǎn)成Number而導(dǎo)致超出瀏覽器限制范圍(chrome是17位就開始作妖,18就補0)其他瀏覽器暫時沒測試過呀枢,歡迎各位大佬科普

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胚股,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子裙秋,更是在濱河造成了極大的恐慌琅拌,老刑警劉巖缨伊,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異进宝,居然都是意外死亡刻坊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門党晋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭胚,“玉大人,你說我怎么就攤上這事隶校÷┮妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵深胳,是天一觀的道長绰疤。 經(jīng)常有香客問我,道長舞终,這世上最難降的妖魔是什么轻庆? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮敛劝,結(jié)果婚禮上余爆,老公的妹妹穿的比我還像新娘。我一直安慰自己夸盟,他們只是感情好蛾方,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著上陕,像睡著了一般桩砰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上释簿,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天亚隅,我揣著相機與錄音,去河邊找鬼庶溶。 笑死煮纵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偏螺。 我是一名探鬼主播行疏,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砖茸!你這毒婦竟也來了隘擎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤凉夯,失蹤者是張志新(化名)和其女友劉穎货葬,沒想到半個月后采幌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡震桶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年休傍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹲姐。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡磨取,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柴墩,到底是詐尸還是另有隱情忙厌,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布江咳,位于F島的核電站逢净,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歼指。R本人自食惡果不足惜爹土,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望踩身。 院中可真熱鬧胀茵,春花似錦、人聲如沸挟阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽附鸽。三九已至轨奄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拒炎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工挨务, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留击你,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓谎柄,卻偏偏與公主長得像丁侄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朝巫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361