关于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 声明全局变量的三种方式详解
May 07 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
Jan 13 Javascript
再谈JavaScript线程
Jul 10 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 Javascript
angular将html代码输出为内容的实例
Sep 30 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
JavaScript常见事件对象与操作实例总结
Jan 05 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
手把手教你如何编译打包video.js
Dec 09 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结合飞信 免费天气预报短信
2009/05/07 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Python使用OpenCV进行标定
2018/05/08 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
大学校庆策划书
2014/01/31 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
MySQL GTID复制的具体使用
2022/05/20 MySQL