关于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",
,
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);
}

在Javascript中 声明时用"var"与不用"var"的区别
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不

js作用域及作用域链概念理解及使用
要理解变量的作用域范围就得先理解作用域链用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性。作用域链:由于js的变量都是对

JS 模态对话框和非模态对话框操作技巧汇总
模态窗口javascript技巧汇总(传值、打开、刷新)1、要弹出的页面中,一定要保证head/head标签间有basetarget=_self,否则会弹出的模态窗口上,点击按钮时