2013-02-18 94 views
6

我們有這種'奇怪'的情況,其中存儲在數據屬性(ex data-prodcode)中的某些產品代碼(例如11E6)正在轉換爲11000000, jquery點擊功能。類似這樣的:防止將包含E和數字的字符串轉換爲數字

<a data-prodcode="11E6">click</a> 
    var code = $(this).data('prodcode'); 
    console.log(code); --> 11000000 

有關如何避免此行爲或可能導致它的任何建議?

+3

這是因爲'.data'嘗試在可能的情況下將值自動轉換爲數字或布爾值,而字符串'11E6'看起來像[科學記數法中的數字](http://en.wikipedia.org/wiki/ Scientific_notation#E_notation)到計算機。 – Blazemonger 2013-02-18 16:25:55

回答

7

documentation

每一個試圖將字符串轉換爲JavaScript值 (包括布爾,數字,對象,數組和null),否則 它保留爲一個字符串。要檢索值的屬性作爲字符串 而不嘗試轉換它,請使用attr()方法。

您可以使用attr爲了避免自動解析:

var code = $(this).attr('data-prodcode'); 

更準確地說:這不應該發生。事實上,它在最近的版本中不會發生。下面是目前的jQuery的的代碼(最有趣的部分是註釋):

if (typeof data === "string") { 
     try { 
      data = data === "true" ? true : 
       data === "false" ? false : 
       data === "null" ? null : 
       // Only convert to a number if it doesn't change the string 
       +data + "" === data ? +data : 
       rbrace.test(data) ? jQuery.parseJSON(data) : 
        data; 
     } catch(e) {} 

而且它在jQuery的1.8和1.9的工作原理:它不字符串轉換爲數字,如果迴轉換不會產生相同的字符串。但它在jQuery 1.7中不起作用。

+0

請務必在您的代碼中添加註釋,說明您爲何要這樣做,因此一些善意的優化程序稍後不會再更改它。 – Blazemonger 2013-02-18 16:29:46

+1

事實上,在我看來,jQuery的'data'函數對字符串是非常危險的。看起來他們真的太聰明瞭...... – 2013-02-18 16:31:51

+1

嗯,這可能是一個邊緣案例。在任何情況下,任何需要字符串的人都可以並應該使用您的解決方案,無論如何,這可能比'.data'更有效。 – Blazemonger 2013-02-18 16:35:38

相關問題