NaN与任何值都是不相等的,包括NaN;
数字类型包含普通数字和
NaN。NaN是数字类型;转换成Boolean是false。
一个扩展: 只有
null、undefined、‘’、0、NaN这五个值转换Boolean结果是false, 其余都是true。
判断一个值是否为数字类型一般使用
isNaN:true 不是数字,false是数字
isNaN的转换原理
分基本数据类型和引用数据类型的转换
基本数据类型
通过
Number|parseInt|parseFloat()等方法(甚至可以用前面加+的方式)看能否转换为数字。可以则为false,反之为true。V8底层默认是使用Number来转换数字
注意点:
其中
parseInt|parseFloat()的转换规则:是从左往右找,把数字都一个个提取出来(parseFloat包括第一个小数点),在遇到第一个非数字的值时则停止查找,即使后面还有数字。查找的时候会先转换为字符串,然后再查找。所以nullfalse等包括空字符串转换的结果都是NaN
示例
其他基本数据类型转数字的示例
除了
undefined转换的结果是NaN其他都是0; 另外true转换成1;其中undefined结果会是NaN是因为其代表一个未赋值的值,只是定义了一下,null则代表空值,也是一个值。
引用数据类型
是先通过
toString()转换成字符串,然后再通过Number()方法转换;看能否得到数字。toString()方法的转换规则
所有对象转换的结果都是一样的:
[object Object],而数组则直接转换成字符串。
结合Number的知识转换结果很显然
==进行比较的时候其中一边包含数字的时候就需要先把其他类型转换成数字在比较。