类型分类
- 原始类型:Number,String,Boolean,null,undefined,symbol(ES6新增)
- 引用类型:object(数组,Data,正则...),function
原始类型
number
- isNaN 用来判断 NaN,先将参数尝试强制转化成数字,返回boolean
基本概念:isNaN() 函数用来确定一个值是否为NaN.
基本示例:
//1
isNaN(NaN); // true
//2
isNaN(true); // false
isNaN(false); // true
//3
isNaN(37); // false
isNaN('37'); // false
//4
isNaN(null); // false
isNaN(undefined); // true
//5
isNaN({}); // true
isNaN({name: 'LinYY'}); // true
思考:上面 4 中的结果为什么 null 是 false 呢?undefined 结果是 true?object 是false? 解答这个原因先看几个相关的示例
原始类型
基本类型
- 字符
isNaN('12') // Number('12') > 12 -> false
isNaN('12,23') // ==>Number('12, 23') -> 12,23 -> true
- 数字
isNaN(12) // Number(12) > 12 -> false
引用类型
- 对象
let o = {}
isNaN(o) // ==> true
o.toString() // ==> "[object Object]", Number("[object Object]") ==> true
- 数组
let arr = [12, 23]
isNaN(arr) // ==> true
arr.toString() // ==> "12, 23", 所以 Number("12, 23") ==> true
- data
isNaN(new Date()); // false
isNaN(new Date().toString()); // true
解释上面问题
- null
isNaN(null) // false, 因为 Number(null) ==> 0
- undefined
isNaN(undefined) // true。因为 Number(undefined) ==> NaN
- 引用类型
isNaN('') // false,因为 Number('') -> 0。
//同理:
isNaN([]) // false,因为 [].toString() ->'' ,Number('') -> 0
isNaN([12, 23]) // true 因为[12, 23].toString()->"[object Object]", Number("[object Object]") ==> true
总结:isNaN() 使用分两种情况
- 引用数据类型 object, 先通过 toString 方法转化成字符串,再通过 Number 方法转化成数字类型
- 其他基本类型 直接使用 Number 方法转化成数字类型
思考,怎么判断一个数是否为有效数字?
- 这样吗?
if(isNaN(param) == NaN){
console.log('不是有效数字')
}
明显上面的写法是错误的,因为 NaN == NaN 也是不相等的,所以上面代码永远不会执行
- 正确使用方法
if(isNaN(param)){
console.log('不是有效数字')
}