對于js初學(xué)者來說,js的數(shù)據(jù)類型可以簡單地區(qū)分為簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型疚漆。
簡單數(shù)據(jù)類型包括以下這些:
number:數(shù)字類型夭苗,包括整數(shù)、浮點數(shù)缚够、特殊值(Infinity,NaN)
string:字符串類型说订,字符串,需要使用雙引號包裹字符串內(nèi)容潮瓶。
undefined:undefined類型陶冷,就一個值undefined,表示未定義的值
boolean:boolean類型毯辅,包括兩個值true和false
null:null埂伦。
而復(fù)雜數(shù)據(jù)類型主要就是object了。
還有一種劃分數(shù)據(jù)類型的方式:值類型數(shù)據(jù)思恐,引用類型數(shù)據(jù)沾谜。
值類型數(shù)據(jù)包括number,string胀莹,Boolean基跑,null和undefined。
引用型數(shù)據(jù)則包括object描焰,function媳否,array.
js提供了一個操作符操作符typeof()來檢測數(shù)據(jù)類型 (括號可寫可不寫,不寫的時候檢測的值與typeof之間用空格隔開荆秦。)
那么typeof的返回值返回的都是什么數(shù)據(jù)類型呢篱竭?
如下:
string,number步绸,Boolean掺逼,undefined,object瓤介,function
例如:
大家有沒有注意到上圖圈紅圈的部分吕喘?
不管是數(shù)據(jù)劃分為簡單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型赘那,還是劃分為值類型和引用類型,null和object都不是同一類氯质,但是typeof null的返回值卻是object募舟。難道是數(shù)據(jù)劃分有誤,落落在這里出現(xiàn)了筆誤病梢?還是……胃珍?
其實數(shù)據(jù)劃分并沒有錯哦,這是硬性規(guī)定的蜓陌。
那為什么會如此詭異呢觅彰?
說起來,其實是最初的javascript實現(xiàn)的bug啦钮热。
還有其它解釋嗎填抬?當然有咯!
來隧期,看一下原型鏈圖:
還是煩請注意圖上畫紅圈的地方飒责!
原型鏈的終點是null。
但是仆潮,原型鏈上的都是Object類型的宏蛉,是不應(yīng)該出現(xiàn)非objec類型的,所以呢性置,哼哼拾并,就把null也弄成了object類型。但是鹏浅,數(shù)據(jù)類型的規(guī)定可是沒有改的哦嗅义!null本質(zhì)還是值類型的null。
總之隐砸,記住一點之碗,不管typeof null返回啥,null就是null季希。