JavaScript 中的 NaN 和 isNaN
1、NaN
NaN 即 Not a Number , 不是一个数字。那么 NaN 到底是什么呢? 在 JavaScript 中,整数和浮点数都统称为 Number 类型 。除此之外,Number 类型还有一个很特殊的值,即 NaN 。它是 Number 对象上的一个静态属性,可以通过 Number.NaN 来访问 。
| 
 1 
 | 
console.log(Number.NaN);// NaN | 
在 ECMAScript v1 和其后的版本中,还可以用预定义的全局属性 NaN 代替 Number.NaN 。
| 
 1 
 | 
console.log(NaN);//NaN | 
在以下两种场景中,可能会产生 NaN 值 。
【1】表达式计算
一个表达式中如果有减号 (-)、乘号 (*) 或 除号 (/) 等运算符时,JS 引擎在计算之前,会试图将表达式的每个分项转化为 Number 类型(使用 Number(x) 做转换)。如果转换失败,表达式将返回 NaN 。
| 
 1 
2 
3 
4 
5 
6 
 | 
100 -'2a' ;// NaN'100' /'20a';// NaN'20a' * 5 ;//NaNundefined - 1;//NaN, Number(undefined) == NaN[] * 20 ;// 0, Number([]) == 0null - 5;// -5, Number(null) == 0 | 
而 加号 (+) 不会将其两边的变量转化为 Number 类型,这是因为JS表达式的执行顺序是按照运算符的优先级从左到右依次进行的,如果加号 (+) 两边的变量都是 Number 类型时,才会做数字相加运算,如果其中有一个变量是字符串,则会将两边都作为字符串相加。
| 
 1 
2 
 | 
5+4+"6" ="96" ;1+"2"+ 3 = "123" | 
【2】类型转换
直接使用 parseInt,parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回 NaN 。
| 
 1 
2 
3 
4 
 | 
"abc" - 3  // NaNparseInt("abc") // NaNparseFloat("abc")//NaNNumber("abc")   //NaN | 
对于 数字+字符 的值,其转化结果会有所不同:
| 
 1 
2 
3 
4 
 | 
Number("123abc");//NaNparseInt("123abc");//123parseInt("123abc45");//123parseFloat("123.45abc");//123.45 | 
Number 转换的是整个值,而不是部分值;parseInt 和 parseFloat 只转化第一个无效字符之前的字符串。 另外,一元加操作符也可以实现与 Number 相同的作用。
| 
 1 
2 
3 
4 
 | 
+"12abc";//NaN+"123";//123+"123.78";//123.78+"abc";// NaN | 
因此,当一个字符串不能被 Number、parseInt 或 parseFloat 成功转换时,就返回 NaN,表示该字符串无法被识别为数字类型,这是一个异常状态,并不是一个确切的值。
2、isNaN
isNaN() 是一个全局方法,它的作用是检查一个值是否能被 Number() 成功转换 。 如果能转换成功,就返回 false,否则返回 true 。
| 
 1 
2 
3 
4 
5 
 | 
isNaN(NaN)   //true 不能转换isNaN("123")  //false 能转换isNaN("abc")   //true 不能转换isNaN("123abc")  //true 不能转换isNaN("123.45abc")//true 不能转换 | 
可以看出,isNaN() 没有办法判断某个值本身是否为 NaN 。如果想要知道某个值本身是否为 NaN,可以利用 NaN 不等于自身 这一特性来判断。
| 
 1 
2 
3 
 | 
function selfIsNaN(value){    return value !== value} | 
另外,ES6 在 Number 对象上也提供了 isNaN() 方法,和全局方法 isNaN() 不同的是,它用于判断某个值本身是否为 NaN,而不需要进行类型转换。
| 
 1 
2 
3 
 | 
Number.isNaN("123");//false 本身不是NaNNumber.isNaN("abc");//false 本身不是NaNNumber.isNaN(NaN);// true 本身是NaN | 
原创发布 @一像素 2016 博客园
JavaScript 中的 NaN 和 isNaN的更多相关文章
- JavaScript中的 NaN 与 isNaN
		
NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...
 - 前端学习之JavaScript中的 NaN 与 isNaN
		
NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...
 - js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
		
在JavaScript的数字类型Number中,我们最常使用的大概是整数类型与浮点数类型,但除这两者外,还有个特殊的存在NaN,为什么NaN!==NaN?我们如何判断一个值是否等于NaN呢?这篇文章好 ...
 - Javascript中undefined,NaN等特殊比较
		
以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) ...
 - 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是有效数字 ...
 - JavaScript中的NaN
		
论装逼我只服NaN 首先这逼自己都不愿意等于自己 console.log(NaN == NaN); // false 这逼够嫌弃自己的 其次这逼本身的意思是非数字就是NaN 然鹅typeof NaN结 ...
 - JavaScript学习系列8 - JavaScript中的关系运算符
		
JavaScript中有8个关系运算符,分别是 ===, !===, ==, !=, <, <=, >, >= 1. 恒等运算符 (===) ===也叫做 严格相等运算符,它要 ...
 - 你应该知道的JavaScript中NaN的秘密
		
NaN,不是一个数字,是一种特殊的值来代表不可表示的值,使用typeof或其他任何与之比较的处理方式,‘NaN’则会引起一些混乱, 一些操作会导致NaN值的产生.这里有些例子: Math.sqrt(- ...
 
随机推荐
- Oracle 统计量NO_INVALIDATE参数配置(上)
			
转载:http://blog.itpub.net/17203031/viewspace-1067312/ Oracle统计量对于CBO执行是至关重要的.RBO是建立在数据结构的基础上的,DDL结构.约 ...
 - mongodb中查询返回指定字段
			
mongodb中查询返回指定字段 在写vue项目调用接口获取数据的时候,比如新闻列表页我只需要显示新闻标题和发表时间,点击每条新闻进入详情页的时候才会需要摘要.新闻内容等关于此条新闻的所有字段. ...
 - centos7.3安装zip,unzip
			
安装命令: yum install -y unzip zip
 - Tornado 中 PyMongo Motor MongoEngine 的性能测试
			
最近在使用 Tornado 开发 API,数据库选择了 MongoDB,因为想使用 Geo 搜索的特性.Python 可供选择的 MongoDB Drivers 可以在官网查找. 在这些 Driver ...
 - HTML5 浏览器接收的常用 content-type
			
<1> 常见的设置方法 response.setHeader("content-type", 'text/html'); <2> 浏览器接收的常用 cont ...
 - CSS 3栏自适应布局
			
绝对定位 css html,body{margin: 0px;height:100%;} div{height: 100%;} .left,.right {top: 0px;position: abs ...
 - MyEclipse jsp 中文乱码
			
在最开始加上 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
 - Jquery无缝轮播图的制作
			
轮播是html页面中比较常见的一种展现形式,也是基础,把轮播图做好,是排版中比较关键的 1.首先是轮播的html元素放置:做轮播之前,要有一个初步的认识 2.每个元素的位置怎样摆放,也是很关键的,这里 ...
 - nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)
			
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory) ...
 - margin和padding的四种写法
			
我们经常会看到CSS样式属性中外边距margin和内边距padding的各种用法,这里做一个小结,但只简单介绍margin,因为它们的用法大同小异. 方法一. margin:10px; //4个外边距 ...