[JavaScript] null 是不是個物件?

[JavaScript] null 是不是個物件?

最近到某家的科技公司面試,被詢問了一些關於 JavaScript 的問題,被問到了其中一題如下:

typeof null === 'object' && (console.log('null is a object'))

這題很直接的就在考對 JavaScript 的物件的熟悉度,當下這題我並沒有回答出正確的答案,也代表這自己對 JavaScript 的 物件,還不是這麼的熟悉

之後詳讀了相關文件,於下方做紀錄:


首先 使用 typeof 的方法去回傳 null 的資料型態時,的確會得到 "object" 的結果,不過這部分算是 JavaScript 中一個很奇怪的點,自己在 Google 時,也發現存在了不少的爭議

也有人在 ES6 中,提案過要修正這部分,將 nulltypeof 中回傳的結果改為 null,不過這項提案卻被 駁回

原因如下:

第一代 JavaScript 引擎中的 JavaScript 值表示為 32 位的字符。最低 3 位作为一种标识,表示值是对象,整数,浮点数或者布尔值。对象的标识是 000。而为了表现 null 值,引擎使用了机器语言的 NULL 指针,该字符的所有位都是 0。而 typeof 就是检测值的标志位,所以 typeof 认为 null 是一個 物件

不過也有很多人認為沒有必要深究這個問題


參考文章:

簡書:Javascript基础总结(一)
MDN:typeof

Facebook 功能: