線上問題:瀏覽器接口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是否在邊界范圍內,如下圖: