关于jQuery $.isNumeric vs. $.isNaN vs. isNaN

所属分类: 网络编程 / JavaScript 阅读数: 1601
收藏 0 赞 0 分享

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

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

具体区别可以看测试:

测试数据:

复制代码 代码如下:

var values = [

"-10",
,
xFF,

"0xFF",

"8e5",
.1415,

+10,
,

"",

{},

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

更多精彩内容其他人还在看

jQuery LigerUI 使用教程表格篇(1)

ligerGrid是ligerui系列插件的核心控件,用户可以快速地创建一个美观,而且功能强大的表格,支持排序、分页、多表头、固定列等等
收藏 0 赞 0 分享

JavaScript中常用的运算符小结

JavaScript中常用的运算符小结,需要的朋友可以参考下。
收藏 0 赞 0 分享

深入理解JavaScript系列(13) This? Yes,this!

在这篇文章里,我们将讨论跟执行上下文直接相关的更多细节。讨论的主题就是this关键字。实践证明,这个主题很难,在不同执行上下文中this的确定经常会发生问题
收藏 0 赞 0 分享

javascript (用setTimeout而非setInterval)

javascript (用setTimeout而非setInterval)如果用setInterval 可能出现 下次调用会在前一次调用前调用
收藏 0 赞 0 分享

JavaScript中两个感叹号的作用说明

用两个感叹号的作用就在于,如果明确设置了o中flag的值(非null/undefined/0""/等值),自然test就会取跟o.flag一样的值;如果没有设置,test就会默认为false,而不是null或undefined
收藏 0 赞 0 分享

javascript写的简单的计算器,内容很多,方法实用,推荐

最近用javascript写了一个简单的计算器,自己测试感觉还好,代码都给了注释,非常不错,推荐大家学习。
收藏 0 赞 0 分享

js的表单操作 简单计算器

javascript写的简单的加减乘除计算器,里面涉及到一些方法还是很实用的哦,新手不要错过
收藏 0 赞 0 分享

Jquery中删除元素的实现代码

empty用来删除指定元素的子元素,remove用来删除元素,或者设定细化条件执行删除
收藏 0 赞 0 分享

javaScript 利用闭包模拟对象的私有属性

JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument
收藏 0 赞 0 分享

为JavaScript类型增加方法的实现代码(增加功能)

大家在js开发过程中有些功能已经满足不了我们的需求,或没有我们需要的功能,那么我们就可以自己扩展下,个性化js
收藏 0 赞 0 分享
查看更多