原生JS--三大特殊数据类型

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

  • 概念:未赋值
  • 特殊点:
    • undefinednull关系运算符两边隐式转换后,得到了一致的数据:false 或 0
    • undefinedNumber( )转成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的数据类型是对象,但不是空对象,就是空
  • 特殊点:
    • undefinednull关系运算符两边隐式转换后,得到了一致的数据:false 或 0
    • nullnumber转成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

你可能感兴趣的:(原生JS)