之前隻知道typeof null = object,但是卻從來不知道是為什麼。最新查閱資料的時候,看到了這個原理,記錄下來,友善自己以後檢視。
原理是這樣的,不同的對象在底層都表示為二進制,在 JavaScript 中二進制前三位都為 0 的話會被判
斷為 object 類型, null 的二進制表示是全 0,自然前三位也是 0,是以執行 typeof 時會傳回“ object ”。
這個bug是第一版Javascript留下來的。在這個版本,數值是以32位元組存儲的,由标志位(1~3個位元組)和數值組成。标志位存儲的是低位的資料。這裡有五種标志位:
- 000:對象,資料是對象的應用。
- 1:整型,資料是31位帶符号整數。
- 010:雙精度類型,資料是雙精度數字。
- 100:字元串,資料是字元串。
- 110:布爾類型,資料是布爾值。
最低位有一位,那麼标志位隻有一個1位元組長度;或者是零位,标志位有3個位元組長度,多出兩個了位元組,一共多出四種類型。
在網上看到一個更詳細的前世今生。連結如下:http://www.cnblogs.com/xiaoheimiaoer/p/4572558.html