[JavaScript] null 是不是個物件?
最近到某家的科技公司面試,被詢問了一些關於 JavaScript 的問題,被問到了其中一題如下:
typeof null === 'object' && (console.log('null is a object'))
這題很直接的就在考對 JavaScript 的物件的熟悉度,當下這題我並沒有回答出正確的答案,也代表這自己對 JavaScript 的 物件,還不是這麼的熟悉
之後詳讀了相關文件,於下方做紀錄:
首先 使用 typeof
的方法去回傳 null
的資料型態時,的確會得到 "object"
的結果,不過這部分算是 JavaScript
中一個很奇怪的點,自己在 Google 時,也發現存在了不少的爭議
也有人在 ES6
中,提案過要修正這部分,將 null
在 typeof
中回傳的結果改為 null
,不過這項提案卻被 駁回
了
原因如下:
第一代 JavaScript 引擎中的 JavaScript 值表示為 32 位的字符。最低 3 位作为一种标识,表示值是对象,整数,浮点数或者布尔值。对象的标识是 000。而为了表现
null
值,引擎使用了机器语言的 NULL 指针,该字符的所有位都是 0。而typeof
就是检测值的标志位,所以typeof
认为null
是一個 物件
不過也有很多人認為沒有必要深究這個問題
參考文章:
簡書:Javascript基础总结(一)
MDN:typeof