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

最新文章

  1. ADFS3.0与SharePoint2013安装配置(原创)
  2. leetcode-【中等题】3. Longest Substring Without Repeating Characters
  3. 使用@Configuration注解来代替Spring的bean配置
  4. python一个简单的登录
  5. 让超链接点击后不跳转,可以用href = &quot;#&quot;,但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成
  6. Qt新建线程的方法(有QRunnable,QThreadPool,moveToThread和QtConcurrent的例子)
  7. 飘逸的python - 简明gzip模块压缩教程
  8. 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。
  9. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
  10. 向combobox控件中添加元素
  11. openstack 5大组件之间的关系和基本架构思维导图
  12. 常见26种NLP任务的练手项目
  13. [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
  14. Oracle课程档案,第十七天
  15. Xmind 8 pro 软件破解版
  16. select多选框
  17. webpack4 未设置mode会自动压缩
  18. JVM 参数详解
  19. cronatb
  20. clear()、sync()、ignore()

热门文章

  1. create_pascal_tf_record.py 生成的record一直为0字节
  2. Newtonsoft.json 二次引用出错解决办法
  3. umask权限使用
  4. 点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?
  5. 项目中的那些事---Java反射的应用
  6. js 百度地图和谷歌地图的选择
  7. 根据网站运行日志猜测的百度蜘蛛ip
  8. 从默认的index.jsp页面跳转或转发到其他页面
  9. 洛谷P1470 最长前缀
  10. 【P3056】【USACO12NOV】笨牛Clumsy Cows