這是由Javascript規(guī)范規(guī)定的魄咕,Null和Object都是javascript中的數(shù)據(jù)類型衩椒。Null數(shù)據(jù)類型只有一個值:null。就像undefined數(shù)據(jù)類型只有一個值:undefined哮兰。問題出在typeof操作符的定義規(guī)范毛萌,如下:
11.4.3?The?typeof?Operator
The?production?UnaryExpression?:?typeof?UnaryExpression?is?evaluated?as?follows:
1.?Evaluate?UnaryExpression.
2.?If?Type(Result(1))?is?not?Reference,?go?to?step?4.
3.?If?GetBase(Result(1))?is?null,?return?"undefined".
4.?Call?GetValue(Result(1)).
5.?Return?a?string?determined?by?Type(Result(4))?according?to?the?following?table:
Type?Result
Undefined?"undefined"
Null?"object"
Boolean?"boolean"
Number?"number"
String?"string"
Object?(native?and
doesn’t?implement
[[Call]])
"object"
Object?(native?and
implements?[[Call]])
"function"
Object?(host)?Implementation-dependent
可以看到,對于Null類型的值(只有null)喝滞,規(guī)范就是定義返回"object"這個字符串阁将。但是本質(zhì)上Null和Object不是一個數(shù)據(jù)類型,null值并不是以O(shè)bject為原型創(chuàng)建出來的右遭。所以null?instanceof?Object是false做盅。但從這里也可以看到,null確實是javascript中用來表示空引用的一個特殊值窘哈。使得它不是instanceof?Ojbect吹榴,而typeof?null是“object”。在語義上也是可以理解的滚婉。
這是摘自論壇上的回答图筹,覺得很有道理,就摘錄下來让腹,感覺計算機(jī)就是這樣子有些問題不能太專牛角尖远剩,自己想半天想不通的結(jié)果人家規(guī)定就這樣。哈哈哨鸭。還是讀書少。0.0