防止将包含E和数字的字符串转换为数字

时间:2013-02-18 16:24:14

标签: javascript jquery custom-data-attribute jquery-data

我们有这种'奇怪'的情况,当在jquery点击功能中检索时,存储在数据属性(ex data-prodcode)中的某些产品代码(例如11E6)将转换为11000000。像这样:

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

有关如何避免此行为或可能导致此行为的任何建议吗?

1 个答案:

答案 0 :(得分: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中不起作用。