关于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 相关文章推荐
jQuery1.6 正式版发布并提供下载
May 05 Javascript
JQuery AJAX 中文乱码问题解决
Jun 05 Javascript
详细介绍8款超实用JavaScript框架
Oct 25 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
Dec 02 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
Dec 15 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
Mar 04 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
mui框架移动开发初体验详解
Oct 11 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
深入了解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获得数组交集与差集的方法
2015/06/10 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php框架知识点的整理和补充
2021/03/01 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
临床医学系毕业生推荐信
2013/11/09 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2015年宣传工作总结
2015/04/08 职场文书
吴仁宝观后感
2015/06/09 职场文书
Python合并pdf文件的工具
2021/07/01 Python
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
Linux中如何安装并部署Redis
2022/04/18 Servers