1.为什么需要isNaN()-----因为需要用它检查一个值是否为 NaN类型
因为NaN值是无法直接比较出的
NaN == NaN //false
NaN === NaN //false
NaN与任何值的比较都是返回false 所以isNaN()就是为了检查一个值是否为NaN,
2.isNaN()怎么判断值是否为NaN-----调用Number()强制转换,判断是否为数值型
首先,isNaN -- 也就是 is Not a Number ,是否为非数值类型,也就是说,实际是判断传入的数据是否为数值类型
那么,怎么判断传的值是非数呢?isNaN()并非只是单独的判断传的值是否为 123 12.1 这种纯数字类型,它对数据进行了 隐式类型转换,通过对传入的数据调用Number()方法,然后对调用后的结果再进行判断,如果这个数据可以被Number()合法的转换为数字,那么就为 isNaN()就会返回 false
由于进行了隐式转换,也就是说,有些看起来 不像 数字 的值,也会被判为 number
2.1判断一个数字是否为NaN:
2.2判断一个字符串是否可转换为数字:
2.3判断空字符串与空格字符串:
2.4判断对象与数组:注意是空数组不是多元素数组
3.那么Number()又是怎么转换判断数据是不是数值的呢
3.1如果传入是一个数字,(包括科学计数法)转换后结果就是这个数字
3.2如果是一个字符串,会被强制转换为数字类型-如果可以的话
3.2.1Number()怎么强制解析字符串的呢?
3.2.1.1 如果字符串是一个有效的数字字面量(包括整数,小数,科学技术法 表示)则会被转换为相应数字
3.2.1.2如果字符串是空字符串或只包含空格,则转换为数字0
3.2.1.3如果字符串不能被解析为 有效数字,则会转为NaN
3.3如果Number()传的是布尔值
true转为1 false转为0
3.4如果Number()传的是对象或数组
会先尝试调用该对象的valueOf()方法来获取一个原始值,不成功调用tostring(),然后再根据上述规则转换
3.4.1原始值是什么
对象的原始值(primitive value)是指可以直接表示或存储在计算机内存中的基本数据类型的值。JavaScript 中的原始值包括数字、字符串、布尔值、null 和 undefined。
3.4.2valueOf()怎么获取对象的原始值
3.4.2.1如果这个对象没有重写valueOf方法与toString(),一般会直接返回该对象,而返回的值不是原始值,则又会隐式调用内置的toString(),Object.prototype.toString(),去进行类型转换
3.4.2.2如果这个对象重写了valueOf ,则按重写的用,如果直接valueOf返回的是原始值,就不需要再调用toString()进行转换
3.4.3valueOf()转化数组--最后其实就是用toString()把值都取出来
3.5其它情况下Number()返回的是NaN