jQuery $.isNumeric vs. $.isNaN vs. isNaN
在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字。
首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是 jQuery.isNumeric ()。这并不奇怪,因为jQuery.isNaN() 同Javascript内置的isNaN()名字相同,但是语义却不完全相同,在一定意义上会造成歧义。 jQuery.isNumeric ()有着与其相似的功能,同时也解决了歧义问题。
jQuery.isNumeric ()检查传进的参数是否是数字或者可否转换为数字;Javascript 内置的isNaN() 检查传进的参数是否是一个合法的数字,典型的例子是0/0。
具体区别可以看测试:
测试数据:
var values = [ "-10", 16, 0xFF, "0xFF", "8e5", 3.1415, +10, 0144, "", {}, NaN, null, true, Infinity, undefined, false ];
使用jQuery verision1.6:
输出:
!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);
}
最新文章
- ADFS3.0与SharePoint2013安装配置(原创)
- leetcode-【中等题】3. Longest Substring Without Repeating Characters
- 使用@Configuration注解来代替Spring的bean配置
- python一个简单的登录
- 让超链接点击后不跳转,可以用href = ";#";,但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成
- Qt新建线程的方法(有QRunnable,QThreadPool,moveToThread和QtConcurrent的例子)
- 飘逸的python - 简明gzip模块压缩教程
- 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
- 向combobox控件中添加元素
- openstack 5大组件之间的关系和基本架构思维导图
- 常见26种NLP任务的练手项目
- [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
- Oracle课程档案,第十七天
- Xmind 8 pro 软件破解版
- select多选框
- webpack4 未设置mode会自动压缩
- JVM 参数详解
- cronatb
- clear()、sync()、ignore()