為什麼typeof null→"object" ?

weixin_34413357發表於2017-08-31

typeof null→"object" ?

《你不知道的Javascript》譯者:

原理是這樣的,不同的物件在底層都表示為二進位制,在Javascript中二進位制前三位都為0的話會被判斷為Object型別,null的二進位制表示全為0,自然前三位也是0,所以執行typeof時會返回"object"。

不知道大家有沒有理解,我舉個非常不恰當的例子。

假設所有的Javascript物件都是16位的,也就是有16個0或1組成的序列。

基於上面的假設,我們猜想:

Array: 1000100010001000
null:  0000000000000000

使用typeof檢測[]和null的結果為:

typeof [] →"object"
typeof null→"object"

因為Array和null的前三位都是000。

注意:
為什麼Array的前三位不是100?
這是因為二進位制中的"前"一般來說代表的是低位,比如二進位制00000011對應十進位制數是3,它的前三位是011。

最後囉嗦一句,《通訊原理》是門好課,編碼方面的東西講得一應俱全,通訊計算機一家親~

努力成為優秀的前端工程師!

福利:字面量和物件型別常用形式表

字面量 物件型別 常用形式
string String 'hello'
number Number 1024
boolean Boolean true
null / null
undefined / undefined
object Object {}
/ Array []
/ Date new Date()
/ RegExp /[a-zA-Z]/
/ Error /

相關文章