• 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);
    }
  • 相关阅读:
    android 仿微信聊天界面,以及语音录制功能
    程序员的鄙视链
    Spring 4 官方文档学习(十一)Web MVC 框架之URI Builder
    Spring 4 官方文档学习(十一)Web MVC 框架之Flash Attributes
    Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图
    JDK中的序列化和反序列化
    HTTP/1.1 学习
    HttpComponents 基础接口/类与HTTP message的对应关系
    Apache HttpComponents 学习
    HttpClient学习之 客户端HTTP编程入门
  • 原文地址:https://www.cnblogs.com/hlfei/p/3531273.html
Copyright © 2020-2023  润新知