我們有這種'奇怪'的情況,其中存儲在數據屬性(ex data-prodcode)中的某些產品代碼(例如11E6)正在轉換爲11000000, jquery點擊功能。類似這樣的:防止將包含E和數字的字符串轉換爲數字
<a data-prodcode="11E6">click</a>
var code = $(this).data('prodcode');
console.log(code); --> 11000000
有關如何避免此行爲或可能導致它的任何建議?
我們有這種'奇怪'的情況,其中存儲在數據屬性(ex data-prodcode)中的某些產品代碼(例如11E6)正在轉換爲11000000, jquery點擊功能。類似這樣的:防止將包含E和數字的字符串轉換爲數字
<a data-prodcode="11E6">click</a>
var code = $(this).data('prodcode');
console.log(code); --> 11000000
有關如何避免此行爲或可能導致它的任何建議?
每一個試圖將字符串轉換爲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中不起作用。
請務必在您的代碼中添加註釋,說明您爲何要這樣做,因此一些善意的優化程序稍後不會再更改它。 – Blazemonger 2013-02-18 16:29:46
事實上,在我看來,jQuery的'data'函數對字符串是非常危險的。看起來他們真的太聰明瞭...... – 2013-02-18 16:31:51
嗯,這可能是一個邊緣案例。在任何情況下,任何需要字符串的人都可以並應該使用您的解決方案,無論如何,這可能比'.data'更有效。 – Blazemonger 2013-02-18 16:35:38
這是因爲'.data'嘗試在可能的情況下將值自動轉換爲數字或布爾值,而字符串'11E6'看起來像[科學記數法中的數字](http://en.wikipedia.org/wiki/ Scientific_notation#E_notation)到計算機。 – Blazemonger 2013-02-18 16:25:55