利用 jQuery 的 data 方法取數值時的陷阱
- 2011-12-04
- 20635
- 0
demo 剛剛在抓一個 Bug 的時候發現了這個有趣的事情,以往如果我們想利用 HTML 多記錄一些東西可能會使用自定屬性的方式來達成目標,但是在 HTML 5 出現後,這種自定屬性的部份都改用 data-* 來取代,後來 jQuery 也支援直接用 jquery.data() 方法就可以直接取值,於是就沒有不用的道理了,用了那麼久我倒是第一次發生這有趣的問題。
jQuery 1.8 後已經移除自動轉換的功能,所以可以取到正確的值了,讀者可以使用下方貼的 jsFiddle 工具修改載入的 jQuery 版本測試。
案發現場是因為同時有許多值要記錄,id 和 rel 這些都已經有在使用了,於是就請出 data-* 來記錄相關的值,類似如下
<div id='test' data-int='5681147591416693361' data-a='9007199254740992' data-str='ohiyo'>AAAAA</div>
要取 data 的值當然也很自然的使用
$('#test').data('int')
但是奇怪的事情發生了,我竟然取到 【5681147591416694000】
找遍了整個 DOM 並沒有這個值,於是在反覆測試的情況下發現到,如果使用 data() 來取數值型態的值,最大值將不可以超過PB,也就是千兆,不過我並沒有深入的研究為什麼會有這限制,因此如果你有這種數值會大過千兆的情況,請改用 attr() 來取值,才不會造成失真,下面是一個範例各位可以玩玩看。
經由了多方詢問後了解到 javascript 的 int 並不是我之前認為的 PB (2^50)大小,正確值為 2^53 ,所以數值只要超過了這個值就會爆掉。
回應討論