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


Posted in Javascript onApril 15, 2013

在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 相关文章推荐
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
Angularjs过滤器使用详解
May 25 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
Apr 26 Javascript
深入了解javascript中的prototype与继承
Apr 14 #Javascript
谈谈JavaScript中的函数与闭包
Apr 14 #Javascript
在新窗口打开超链接的方法小结
Apr 14 #Javascript
JS中setTimeout()的用法详解
Apr 14 #Javascript
js验证是否为数字的总结
Apr 14 #Javascript
JS 实现Json查询的方法实例
Apr 12 #Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 #Javascript
You might like
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
如何使用php实现评委评分器
2015/07/31 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
大学军训决心书
2015/02/05 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis