关于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。
通过例子说明下$.isNumeric() vs isNaN()的区别:
Demo html:
<table border="1">
<tr>
<th>变量</th>
<th>!isNaN()</th>
<!-- jquery1.7以后不存在该方法 <th>!$.isNaN()</th> -->
<th>$.isNumberic()</th>
</tr>
</table> var values = ["-10",255,"0xFF","8e5",3.1415,10,100,"",{},NaN,null,true,Infinity,undefined,false]; 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><td>'
+($.isNumeric( v )?"true":"false")
+'</td></tr>' );
}
效果图:
| 变量 | !isNaN() | $.isNumberic() |
|---|---|---|
| -10 | 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 |
| false | true | false |
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);
}
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN的更多相关文章
- 对属性NaN的理解纠正和对Number.isNaN() 、isNaN()方法的辨析
1.属性NaN的误解纠正 NaN (Not a Number)在w3c 中定义的是非数字的特殊值 ,它的对象是Number ,所以并不是任何非数字类型的值都会等于NaN,只有在算术运算或数据类型转换出 ...
- jQuery $.isNumeric vs. $.isNaN vs. isNaN
在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字. 首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是 jQuery.isNumeric ...
- Number.isNaN和isNaN
isNaN会通过Number方法,试图将字符串"测试"转换成Number类型,但转换失败了,因为 Number('测试') 的结果为NaN ,所以最后返回true. 而Number ...
- jQuery.isNumeric() 和 js isNaN()
jQuery.isNumeric( value ) Description: 判断指定参数是否是一个数字值(字符串形式的数字也符合条件),返回 true 或者 false. Example: $.is ...
- 你可能不知道的 NaN 以及 underscore 1.8.3 _.isNaN 的一个 BUG
这篇文章并不在我的 underscore 源码解读计划中,直到 @pod4g 同学回复了我的 issue(详见 https://github.com/hanzichi/underscore-analy ...
- 关于isNAN()函数内进行的莫名其妙的隐式转换?!
isNaN(NaN); // true isNaN(undefined); // true isNaN({}); // true isNaN(true); // false isNaN(null); ...
- 内置函数isNaN()
NaN(not a number)的产生:算术运算返回一个未定义的或无法表示的值 1.NaN并不一定用于表示某些值超出表示范围的情况.将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN. ...
- JavaScript学习笔记-----NaN、isNan
NaN / Number.NaN 全局属性 NaN 的值表示不是一个数字(Not-A-Number), NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样. 在现代浏览器中(ES ...
- JS中的NaN和isNaN,简直是双重人格?
number数字类型 包括数字和NaN,NaN:not a number 但是它是数字类型的 isNaN的用法:检测当前值是否不是有效数字,返回true代表不是有效数字,返回false是有效数字 ...
随机推荐
- Oracle SQL编写注意事项
1.SQL语句用大写的;因为Oracle总是先解析SQL语句,把小写的字母转换成大写的再执行. 2.数据表最好起别名;因为便于sql优化器快速分析. 3.尽量不要使用 insert into tabl ...
- jQuery技术内幕电子版4
参数selector是复杂HTML代码 则利用浏览器的innerHTML机制创建DOM元素 第157行:如果HTML代码满足缓存条件,则在使用转换后的DOM元素时,必须先复制一份再使用,否则可以直接使 ...
- [TopCoder] SRM_594_DIV2.250
好长一段时间没写博客了,实在是想不出有什么好写的.近期也有对自己的职业做了一点思考,还是整理不出个所以然来,很是烦躁 ... 研究TopCoder已经有一小段时间了,都是在做之前的题目,还没有实际参加 ...
- poj 3628 (搜索or背包)
好久没看背包题目了!!!生疏了!!!! 这题是背包题!!!不过对于这题,解决方法还是搜索省时!!! 题意:第一行给你一个N和VV,接下来N行,每行一个数,求得是任选N个数组合求和,求组合的和大于VV而 ...
- jQuery ajax传递特殊字符参数(例如+)
使用jQuery ajax向后台传递参数para=1+1时后台接收到的参数为para=1 1,解决方案是 使用json传递,代码如下. var url = "/test/check" ...
- linux_tomcat7服务器日志爆满导致java崩溃的问题
在linux服务器上部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响. 最近刚刚出现了某台linux服务器上的java应用都假死或挂掉 然后我在输入命 ...
- debug.keystore文件不存在解决办法
重装系统之后,丢失了debug.keystore,找了很久都没有找到,根据网上所讲的只要重新运行一个android项目;就会在avd中生成一个新的debug.keystroe,此法也没解决,索性直接重 ...
- java数组的拷贝四种方法:for、clone、System.arraycopy、arrays.copyof
public class ArrayCopy{ public static void main(String []args){ int []a = {1,3,4,5}; toPrint(a); int ...
- JQuery和UpdatePannel的问题
转: http://www.cnblogs.com/Tim_Liu/archive/2010/11/25/1887937.html 最近在做一个项目,因为涉及到的字段数量很多所以想偷把懒,便使用了Up ...
- php的ob_flush和flush(转)
php.ini中 output_buffering = off 关闭php的缓存 implicit_flush = Off php不会立即输出到浏览器.如果是ON,相当于每次ECHO 立刻执行一个FL ...