關於瀏覽器接口Preview中的數值和postman中獲取到的不一致問題

昨晚在和後端聯調時發現的問題,做下記錄。


  • 情況是這樣的:
    需求是點擊列表後,拿列表的id去獲取詳情數據;然後一直獲取不到,接口沒報錯,參數也傳過去了。後端一頓排查,說你id是不是傳錯了,我庫裏壓根找不到這個id,我說沒錯呀,信誓旦旦打開preview給他看,喏,我獲取到的id是什麼就給你傳什麼過去的呀。等他走後,我想了想,然後偷偷拿着接口到postman去掉,果不其然:
    從postman中獲取到的列表的數據如下:
{
        "jylx": "XX",
        "tdfwdz": "杭州市餘杭區XXX",
        "lrrq": "2019-03-20",
        "lybz": "XX",
        "id": 1621903201412262729
 }

而從chrome開發者工具中preview看到的數據如下:

{
        "jylx": "XX",
        "tdfwdz": "杭州市餘杭區XXX",
        "lrrq": "2019-03-20",
        "lybz": "XX",
        "id": 1621903201412262700
 }

有沒有發現哪裏不一樣?
對,id變了!那肯定拿不到數據洛。
然後讓後端把id轉成string類型,就成功拿到了數據。

  • 分析原因:
    數據是拿到了,可是爲什麼id會變呢?既然postman能拿到正確的數據,那說明是瀏覽器的問題。
    查詢資料後瞭解到:原來是瀏覽器響應數據時,對超長的long型數據進行自動轉換而導致的精度丟失問題
    那超長是多長?有沒有一個邊界呢?
    答案是:有的。
    我們可以通過ES6的 Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER獲取到上下邊界,在這個範圍內不會出現精度丟失問題。也可以直接同 Number.isSafeInteger() 來判斷一個num是否在邊界範圍內,如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章