zoukankan      html  css  js  c++  java
  • jQuery $.isNumeric vs. $.isNaN vs. isNaN

           在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字。

           首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是  jQuery.isNumeric ()。这并不奇怪,因为jQuery.isNaN() 同Javascript内置的isNaN()名字相同,但是语义却不完全相同,在一定意义上会造成歧义。 jQuery.isNumeric ()有着与其相似的功能,同时也解决了歧义问题。

           jQuery.isNumeric ()检查传进的参数是否是数字或者可否转换为数字;Javascript 内置的isNaN() 检查传进的参数是否是一个合法的数字,典型的例子是0/0。

          

           具体区别可以看测试:

    测试数据:

    var values = [
    
    "-10",
    
    16,
    
    0xFF,
    
    "0xFF",
    
    "8e5",
    
    3.1415,
    
    +10,
    
    0144,
    
    "",
    
    {},
    
    NaN,
    
    null,
    
    true,
    
    Infinity,
    
    undefined,
    
    false
    
    ];

    使用jQuery verision1.6:

    for( var index in values ) {
    
        var v = values[ index ];
    
        $( 'table' ).append( '<tr><td>'+v+'</td><td>'
    
                             +(!isNaN( v )?"true":"false")
    
                             +'</td><td>'
    
                             +(!$.isNaN( v )?"true":"false")
    
                             +'</td></tr>' );
    
    }

    输出:

     

    !isNaN()

    !$.isNaN()

    -10

    true

    true

    16

    true

    true

    255

    true

    true

    0xFF

    true

    true

    8e5

    true

    true

    3.1415

    true

    true

    10

    true

    true

    100

    true

    true

     

    true

    false

    [object Object]

    false

    false

    NaN

    false

    false

    null

    true

    false

    true

    true

    false

    Infinity

    true

    false

    undefined

    false

    false

    使用 jQuery version1.7

    for( var index in values ) {
    
        var v = values[ index ];
    
        $( 'table' ).append( '<tr><td>'+v+'</td><td>'
    
                             +(!isNaN( v )?"true":"false")
    
                             +'</td><td>'
    
                             +($.isNumeric( v )?"true":"false")
    
                             +'</td></tr>' );
    
    }

    输出:

     

    !isNaN()

    $.isNumeric()

    -10

    true

    true

    16

    true

    true

    255

    true

    true

    0xFF

    true

    true

    8e5

    true

    true

    3.1415

    true

    true

    10

    true

    true

    100

    true

    true

     

    true

    false

    [object Object]

    false

    false

    NaN

    false

    false

    null

    true

    false

    true

    true

    false

    Infinity

    true

    false

    undefined

    false

    false

        可以看出,$.isNumeric() 跟 !$.isNaN() 结果是一样的, 而 jQuery $.isNumeric() 同Javascript 自带的!isNaN()在对空字符串、null、true/false、Infinity的处理是不同的。因为isNaN()只是检查传入的值是否是NaN类型。

        NaN (Not a Number)是一个数字数据类型,表明未定义(undefined )或无法表示(unrepresentable )的值,尤其是浮点数计算值。

        因此,isNaN(null) == false 在语义上是正确的,因为null不是NaN(事实上null、ture/false等等会先转为数字0)。但是如果用!isNaN()来判断传入的值可否转换为数字,又不大恰当。而Javascript另一种方式 typeof num == 'number' 则无法检测字符串情况。因此如果不使用 jQuery $.isNumeric(),则最好还是重写一个方法判断,比如用正则来判断或者:

    function isNumeric(obj) {
        return !isNaN(parseFloat(obj)) && isFinite(obj);
    }

        

  • 相关阅读:
    用redux-thunk异步获取数据
    用react + redux + router写一个todo
    用react+redux写一个todo
    给产品经理算的一卦。。。
    不知道为什么,我这里出了问题
    通过回调函数阻止进程创建(验证结束,方案完全可行)
    内核回调的触发时机
    我犯下的错误
    搬家完成
    sqlmap从入门到精通-第七章-7-14 绕过WAF脚本-overlongutf8.py&overlongutf8more.py
  • 原文地址:https://www.cnblogs.com/Kingle/p/3015922.html
Copyright © 2011-2022 走看看