1、NaN
- 概念:非法的数值运算得到的结果
- 特殊点:
- 是一个数值型的数据,但不是一个数字
NaN
不等于任何值(包括它本身),和任何数据都不相等
console.log(typeof NaN); // number
console.log(NaN == NaN); // false
【注】计算机认为每一个NaN
都是非法运算的结果,每一个NaN
的来源都不一样,所以不相等。
- 检测方法:
isNaN()
- 隐式类型转换,将数据转成数值,严格转换,能识别小数点
console.log(isNaN(NaN)); // true
console.log(isNaN('hello')); //true, 'hello'不能转成数值,因此会得到NaN
console.log(isNaN('123')); //false, '123'能转成数值,因此不是NaN
console.log(isNaN('12a3'));//true, 严格转换,出现字母就不能转成数值,因此是NaN
console.log(isNaN('12.3'));//false, 能识别小数点,因此能转成数值,因此不是NaN
2、undefined
- 概念:未赋值
- 特殊点:
undefined
在null
关系运算符两边隐式转换后,得到了一致的数据:false
或 0undefined
被Number( )
转成NaN
console.log(undefined == null); // true, undefined和null被隐式转换成一致的数据
console.log(Number(undefined)); // NaN
- 检测方法:
typeof
var b = undefined ;
console.log(typeof b === "undefined"); // 注意要用 ===
3、null
- 概念:空,
null
的数据类型是对象,但不是空对象,就是空 - 特殊点:
undefined
在null
关系运算符两边隐式转换后,得到了一致的数据:false
或 0null
被number
转成0
console.log(undefined == null); // true
console.log(Number(null)); // 0
- 检测方法:检测
null
需要配合typeof
和关系运算符进行判断,需要满足以下两个条件- 首先判断该数据是否是对象类型:
typeof val === "object"
- 且,判断该数据是否是
null
类型:val == null
- 首先判断该数据是否是对象类型:
var o = null;
if(typeof o === "object" && o == null){
console.log("o是null");
}
最后给大家拓展一下:如何区分真正的对象和null
- 真正的对象的标志:任何两个对象都不相等,只要相等了,那么就是一个
- 但是null是可以等于null的
也就是说,null
和对象是不相等的
console.log(null == {}); // false