2017-07-24 65 views
2

我執行一個AJAX調用來生成一個ID。此ID在回覆中發送回客戶端並顯示在輸入字段中。我意識到瀏覽器中顯示的ID不是生成的 - 最後一位數字不同。在服務器端,我使用Adobe ColdFusion自己的serializeJSON()函數序列化數據以將其傳回客戶端。它識別數字序列並將其序列化爲數字。我將我的變量的內容記錄在我的代碼中的不同位置,它看起來一直很好。只有瀏覽器不會做我想要的/期望的。JavaScript誤解編號

我煮下來到這個簡單的例子:

var stru = {"MYID":2761602017000540006}; 
console.dir(stru); 

控制檯日誌2761602017000540000代替2761602017000540006

這是爲什麼?這個數字是否太大而無法存儲在JavaScript中?

回答

4

數字太大而無法存儲在JavaScript中?

是的,max safe integer9,007,199,254,740,991而你試圖發送的數量是2,761,602,017,000,540,006(這是1000倍〜較大的因素)。

這是因爲JavaScript number類型遵循的是64位浮點數格式IEEE 754,該格式不允許與64位整數一樣大的數字。您可以看到number類型值here in the ECMAScript spec 4.3.20的定義。

我建議您將ID作爲String發送。

+0

ColdFusion有非常獨特的方式來決定是否有數字。我會看到我序列化爲字符串,謝謝。 –

3

在JavaScript中,整數最多隻有53位。所以你不能將大於53位的整數放入JavaScript變量,所以另一種方法是使用字符串來保存這個長ID。我希望這可以幫助你

+0

這篇博客文章將幫助您:http://2ality.com/2012/07/large-integers.html –

3

正如Arash所說,你的電話號碼太長(超過53位)。 你可以對這個主題的更多信息:Javascript long integer 唯一的解決辦法似乎是使用字符串而不是數字