NaN
- NaN (Not a Number)在w3c 中定义的是非数字的特殊值,它的数据类型为Number,所以并不是任何非数字类型的值都是NaN,只有在算术运算或数据类型转换时才会是NaN;我们在运用方法parseInt()和parseFloat()时遇到不能转化时,就会返回NaN;
parseInt('abc')//NaN;
parseFloat('a'-2)//NaN;
- 为什么说NaN是个坑呢?首先,它自己和自己都不是相等的,难道这还会不坑?
NaN==NaN//false;
NaN===NaN//false;
所以,我们就不要用NaN来作判断条件了,否则就坑死了
然后,非数字字符串转为数字类型时返回NaN,按理,字符串不是数字类型,我们运用isNaN()时应该返回false,但是却返回了true;我们可以运用Number.isNaN()来解决这一问题!
Number.isNaN('0/0') //string not number ---false
isNaN('0/0') //arithmethic ilegal (NaN)算数 ---true
Number.isNaN('123') //string not number ---false
isNaN('123') //convert to number 转化---false
Number.isNaN('Hello') //string not number ---false
isNaN('Hello') //convert fail(NaN) 转化失败---true
Number.isNaN('') /isNaN(null) //string not number ---false
Number.isNaN(true) //bool not number ---false
isNaN('') /isNaN(null) //convert to 0 ---false
isNaN(true) //convert to 1 ---false
Number.isNaN(undefined)//---false
//undefined not number ---flase
isNaN(undefined) //convert fail ---true
isNaN(parseInt(undefined))//----true
isNaN(parseInt(null))//---true
isNaN(parseInt(''))//---true
isNaN(parseInt(true))//----true
Number.isNaN('NaN') //---false
isNaN('NaN') //---true
Number.isNaN(NaN) //---true
isNaN(NaN) //---true
注* 关于各个数据类型之间的转换
- 操作时,一定要注意页面的隐式转换啊!带各种灵异事件的;否则就哭去吧!
- 页面获取的基本都是字符串类型,取值时一定注意转化哦!