Number类型(NaN和isNaN)

273 阅读2分钟

1.number类型

NaN:NaN属性代表一个“不是数字”的值。这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字(例如, "abc" / 4),要么是因为运算的结果非数字(例如,除数为零)。

虽然 NaN 意味着“不是数字”,但是它的类型是 Number!
console.log(typeof  NaN === "number"); //  "true"

注意: NaN 和任何东西比较——甚至是它自己本身!——结果是false:

2.isNaN: 检测当前值是否不是有效数字,返回true代表不是有效数字,false是有效数字

isNaN()会将括号内的参数利用Number()进行一次转换

对于空数组、只有一个数值成员的数组、null等,isNaN()都会返回false

isNaN(null) //false    
isNaN(isNaN) //true    
isNaN(undefined) //true  
isNaN(true) //false   
isNaN(false) //false

3.isNaN检测机制:

1.首先验证当前要检测得值是否为数字类型,如果不是浏览器会默认的把值转换成数字类型, 把非数字类型的值转换成数字,其他基本类型转换为数字,直接用number这个方法转换
**字符串转数字:**
Number('13') -> 13 
Number('13px') -> NaN 如果当前字符串中出现任意一个非有效数字字符,结果则为NaN
Number('13.5') -> 13.5 可以识别小数

布尔转数字:

Number(true)->1 
Number(false)->0

其他:

Number(null) -> 0
Number(undefined) -> NaN
**对象:**
({}).toString() -> '[object  object]' ->NaN
**数组:**
[12,13].toString() ->'12,13'->NaN     [12].toString() ->'12'->12
**正则:**
/^$/.toString()->'/^$/' ->NaNNumber('')->0  
[].toString()->' '  => isNaN([])->false  
先把[] 转成字符串''  字符串转成数数字是0 ,所以最后的结果:  isNaN0) 是false
**4.当前检测的值已经是数字类型,是有效数字返回false,不是返回true(数字类型中只有NaN不是有效数字,其余都是有效数字)**
parseInt/ parseFloat 等同于number 也是为了把其他类型的值转换为数字类型
parseInt 把一个字符串中的整数部分解析出来,从字符串最左边字符开始找有效数字字符,并转换为数字,
parseInt('13.5px') =>13
parseFloat把一个字符串中的小数(浮点数)部分解析出来 
parseFloat('13.5px')=>13.5