2013-02-18 30 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

相关问题