关于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 相关文章推荐
Javascript String对象扩展HTML编码和解码的方法
Jun 02 Javascript
JavaScript 事件的一些重要说明
Oct 25 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
Jan 24 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
vue引入js数字小键盘的实现代码
May 14 Javascript
mocha的时序规则讲解
Feb 16 Javascript
javascript实现画板功能
Apr 12 Javascript
JS实现超级好看的鼠标小尾巴特效
Dec 01 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实现ODBC数据分页显示一例
2006/10/09 PHP
PHP新手上路(六)
2006/10/09 PHP
解析php5配置使用pdo
2013/07/03 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
香港士多网上超级市场:Ztore
2021/01/09 全球购物
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
会议主持词
2014/03/17 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
小学语文教研活动总结
2014/07/01 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
就业推荐表导师评语
2014/12/31 职场文书
共青团员自我评价
2015/03/10 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
六年级情感作文之500字
2019/10/23 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python