对于js初学者来说,js的数据类型可以简单地区分为简单数据类型和复杂数据类型。
简单数据类型包括以下这些:
number:数字类型,包括整数、浮点数、特殊值(Infinity,NaN)
string:字符串类型,字符串,需要使用双引号包裹字符串内容。
undefined:undefined类型,就一个值undefined,表示未定义的值
boolean:boolean类型,包括两个值true和false
null:null。
而复杂数据类型主要就是object了。
还有一种划分数据类型的方式:值类型数据,引用类型数据。
值类型数据包括number,string,Boolean,null和undefined。
引用型数据则包括object,function,array.
js提供了一个操作符操作符typeof()来检测数据类型 (括号可写可不写,不写的时候检测的值与typeof之间用空格隔开。)
那么typeof的返回值返回的都是什么数据类型呢?
如下:
string,number,Boolean,undefined,object,function
例如:
大家有没有注意到上图圈红圈的部分?
不管是数据划分为简单数据类型和复杂数据类型,还是划分为值类型和引用类型,null和object都不是同一类,但是typeof null的返回值却是object。难道是数据划分有误,落落在这里出现了笔误?还是……?
其实数据划分并没有错哦,这是硬性规定的。
那为什么会如此诡异呢?
说起来,其实是最初的javascript实现的bug啦。
还有其它解释吗?当然有咯!
来,看一下原型链图:
还是烦请注意图上画红圈的地方!
原型链的终点是null。
但是,原型链上的都是Object类型的,是不应该出现非objec类型的,所以呢,哼哼,就把null也弄成了object类型。但是,数据类型的规定可是没有改的哦!null本质还是值类型的null。
总之,记住一点,不管typeof null返回啥,null就是null。