前后端聯(lián)調(diào)過(guò)程中發(fā)現(xiàn)的問(wèn)題。
情況:系統(tǒng)登錄后返回的id值,存在瀏覽器緩存中,后面使用這個(gè)id值作為參數(shù)傳回后端,后端返回信息說(shuō)這個(gè)id不存在。跟后端說(shuō)明這個(gè)情況的時(shí)候,他們拿著postman請(qǐng)求結(jié)果說(shuō)接口沒(méi)有寫(xiě)錯(cuò),是我數(shù)據(jù)傳錯(cuò)了,我拿著瀏覽器Preview里面的數(shù)據(jù)和他們說(shuō)后端傳過(guò)來(lái)的id值就是這個(gè)。然后我使用postman調(diào)用接口,得到以下結(jié)果:

postman調(diào)用結(jié)果
而瀏覽器Preview中的結(jié)果:

Preview數(shù)據(jù)
瀏覽器拿到的id和后端傳過(guò)來(lái)的id不一致,再使用這個(gè)id作為去后端請(qǐng)求數(shù)據(jù)肯定是拿不到結(jié)果的。
為什么postman和瀏覽器Preview里面id值會(huì)差1?
原因:后端使用的是Java,Java的Long型整數(shù)超過(guò)了JS可以精確表示的大數(shù)范圍,這就導(dǎo)致了可能會(huì)出現(xiàn)精度丟失的情況,JavaScript中可以安全使用的最大整數(shù)和最小整數(shù)可以通過(guò)Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER得到。

JavaScript安全使用整數(shù)范圍
解決方案:讓后端將id的值以字符串的類(lèi)型傳到前端,這樣前端就能拿到正確的數(shù)據(jù)了。