為什麼typeof null→"object" ?
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 | / |
相關文章
- 為什麼typeof null 的結果為 objectNullObject
- 你真的知道typeof null的結果為什麼是‘object‘嗎?NullObject
- 為毛 "typeof null" 的結果為 "object" ?NullObject
- 【譯】談談“typeof null為object”這一bug的由來NullObject
- Object.create(null) 和 {} 區別是什麼ObjectNull
- 為什麼索引無法使用is null和is not null索引Null
- 【譯】"Typeof null" 的歷史Null
- 為什麼React元素有一個$$typeof屬性?React
- 為什麼使用Object.prototype.hasOwnPropertyObject
- 並非 Null Object 這麼簡單NullObject
- 『翻譯』"typeof null 是什麼?" 以及其它讓我們感到困惑的 JavaScript 型別NullJavaScript型別
- 為什麼if中null要寫在前面?Null
- V8 的 typeof null 返回 "undefined" 的 bug 是怎麼回事NullUndefined
- 為什麼資料庫欄位要使用NOT NULL?資料庫Null
- 為什麼HashMap的鍵值可以為null,而ConcurrentHashMap不行?HashMapNull
- 返回的 json 串 sessionId 為什麼是 nullJSONSessionNull
- javascript中null是什麼JavaScriptNull
- 詳解Object.create(null)ObjectNull
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap
- 為什麼不建議使用自定義Object作為HashMap的key?ObjectHashMap
- > /dev/null 2>&1 什麼意思?devNull
- Object-C之(Null)與(Bool)ObjectNull
- Object.create(null) 和 {} 的區別ObjectNull
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- Jackson中DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT和ACCEPT_EMPTY_STRING_AS_NULL_OBJECTNullObject
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- [譯]為什麼你應該在相等比較中使用 Object.is()Object
- 請教,建立子論壇後發表帖子,出現null,為什麼?Null
- reflect.TypeOf().numField()和reflect.ValueOf().numField()有什麼區別?
- JS-資料型別- typeof/instanceof/Object.prototype.toStringJS資料型別Object
- Vue原始碼中為什麼要const _toStr = Object.prototype.toString?Vue原始碼Object
- 為什麼 object_getClass(obj) 與 [OBJ class] 返回的指標不同Object指標
- 為什麼不建議給MySQL設定Null值?《死磕MySQL系列 十八》MySqlNull
- mysql資料庫其中一列為null,他會有什麼坑MySql資料庫Null
- 如果null很糟糕,那為什麼現代程式語言還要實現它?Null
- typeof
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- object-c 常用判斷null的巨集定義,如果是null直接返回@””ObjectNull