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);
    }
  • 相关阅读:
    【转载】USB2.0接口差分信号线设计
    2.4G高频PCB天线设计
    [转]热插拔原理和应用
    [转]or cad drc 错误
    Chrome浏览器任意修改网页内容
    Oracle笔记之约束
    Oracle笔记之表空间
    Oracle笔记之序列(Sequence)
    Oracle笔记之用户管理
    Win7下SQLPlus登录时报错"SP2-1503:无法初始化Oracle调用界面"
  • 原文地址:https://www.cnblogs.com/hlfei/p/3531273.html
Copyright © 2011-2022 走看看