之前只知道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