📒NaN与isNaN的一些知识点(把其他类型转换成数字)

237 阅读2分钟

NaN与任何值都是不相等的,包括NaN

数字类型包含普通数字和NaNNaN是数字类型;转换成Booleanfalse

一个扩展: 只有nullundefined‘’0NaN 这五个值转换Boolean 结果是false, 其余都是trueimage.png

判断一个值是否为数字类型一般使用isNaN:true 不是数字, false是数字

isNaN的转换原理

分基本数据类型和引用数据类型的转换

基本数据类型

通过Number|parseInt|parseFloat()等方法(甚至可以用前面加+的方式)看能否转换为数字。可以则为false,反之为trueV8底层默认是使用Number来转换数字

注意点:

其中parseInt|parseFloat()的转换规则:是从左往右找,把数字都一个个提取出来(parseFloat包括第一个小数点),在遇到第一个非数字的值时则停止查找,即使后面还有数字。查找的时候会先转换为字符串,然后再查找。所以null false 等包括空字符串转换的结果都是 NaN

示例

image.png

其他基本数据类型转数字的示例

image.png

除了 undefined 转换的结果是 NaN 其他都是 0; 另外true转换成1;其中undefined结果会是NaN是因为其代表一个未赋值的值,只是定义了一下,null则代表空值,也是一个值。

引用数据类型

是先通过toString()转换成字符串,然后再通过Number()方法转换;看能否得到数字。 toString()方法的转换规则

image.png

所有对象转换的结果都是一样的:[object Object],而数组则直接转换成字符串。

结合Number的知识转换结果很显然

image.png

==进行比较的时候其中一边包含数字的时候就需要先把其他类型转换成数字在比较。