Mark下js最大精確整數範圍,業務中出現的疑難bug

  今天在跟後端聯調中,偶然發現幾個數據的id竟然同樣,我就詢問了下後端這是什麼狀況,然然後端告訴我說並無相同的id,因而開始一塊兒排查問題。後端

    排查中發現,從後端拿來的數據在瀏覽器控制檯NetWork - Response中是正常的,然而在Preview中幾個數據的id變成了相同的,着實使人費解。瀏覽器

  而後感受應該是這個id過長的緣由,超出js能夠處理的最大整數。爲了證實這個猜測,在瀏覽器中作了如下實驗。測試

  首先,js能夠處理的最大整數爲 9007199254740992 and 9007199254740992 (即正負253次方)。spa

  

  就算說是能夠處理長度爲16的整數吧,而後繼續加長度,看看瀏覽器會怎樣處理。code

  下面我輸入了17位的整數,和18位的整數,發現超出16位的數字都會被處理爲0,這也是今天出現這個bug的緣由。blog

  

  由於是測試數據,這些id都是後端工程師本身製造的,生產環境中是不存在16位以上長度的id的,後端修改了這些id長度問題就解決了。it

  算是工做中碰見的疑難雜症吧,本身mark,與你們分享。class

相關文章
相關標籤/搜索