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);
    }

        

  • 相关阅读:
    使用 richtextbox 输出程序运行信息
    多线程 更新 winform 控件的值,以避免UI线程的卡顿
    多线程 以及 主程序退出时 子线程的销毁
    supersocket 通过配置文件启动服务 总是 初始化失败的 解决办法
    增删改存储过程 框架
    winform DataGridView 通用初始化
    SQLServer存储过程 实例,很多语法可以以后参考
    Winform中 DataGridView控件中的 CheckBox 的值读出来 始终 为 False ,已解决
    winform中 让 程序 自己重启
    字符数组什么时候要加‘’
  • 原文地址:https://www.cnblogs.com/Kingle/p/3015922.html
Copyright © 2011-2022 走看看