关于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 Onunload与Onbeforeunload使用小结
Dec 31 Javascript
javascript+mapbar实现地图定位
Apr 09 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
Nov 19 Javascript
KnockoutJs快速入门教程
May 16 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
详解Vue中使用Echarts的两种方式
Jul 03 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 Javascript
Electron + vue 打包桌面操作流程详解
Jun 24 Javascript
JS实现电脑虚拟键盘的操作
Jun 24 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
删除无限级目录与文件代码共享
2006/07/12 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
js对象的比较
2011/02/26 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
Vue发布项目实例讲解
2019/07/17 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python中的随机函数小结
2018/01/27 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
大学生四年生活自我鉴定
2013/11/21 职场文书
幼儿教师思想汇报
2014/01/10 职场文书
消防安全汇报材料
2014/02/08 职场文书
安全责任书怎么写
2014/07/28 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
感谢信模板大全
2015/01/23 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
Python OpenCV之常用滤波器使用详解
2022/04/07 Python