1樓:自由的囚徒
這是JS語言本身的乙個bug。
不同的物件在底層都表示為二進位制,在js中二進位制前三位都為0的話會被判斷為object型別,null的二進位制表示全是0,自然前三位也是0,所以執行typeof時返回"object"
2樓:阿布丁
說句人話,不說書裡的鬼話
因為:所有引用型別的名字是乙個指標,指的是一塊記憶體空間的位址,當這個指標裡面什麼都不放的時候(不指定任何位置),就是null,意思是說,這個變數名最初可能指定乙個物件的位址,後來變數沒了,這個指標也不指定任何位址,但是他最初表示乙個物件,所以後來還是物件。
3樓:
1. 娘胎裡帶出來的.
JS型別值是存在32 BIT 單元裡,32位有1-3位表示TYPE TAG,其它位表示真實值
而表示object的標記位正好是低三位都是0
000: object. The data is a reference to an object.
而js 裡的Null 是機器碼NULL空指標, (0x00 is most platforms).所以空指標引用加上物件標記還是0,最終體現的型別還是object..
這也就是為什麼Number(null)===0吧...
The history of 「typeof null」
2. 曾經有提案 typeof null === 'null'.但提案被拒絕
harmony:typeof_null [ES Wiki]
4樓:LeoYoung
Null確實是乙個非常特殊的型別,之前也有很多人反映過關於Null型別跟Undefined型別的問題,也有你提到的類似typeof檢測的問題。
具體這個問題,因為Null型別只有乙個值null,而一般是認為邏輯上認為null值表示乙個空物件指標,所以用typeof的時候,會返回"object"。所以一般都會把null當做空物件的佔位符。
至於為什麼設計,我也沒參加過ECMAscript的開發,相關資料中的說法也很多,有的說考慮到"null"跟null的區別。有的說因為設計時的侷限,並且該部分影響不大,故沒有重視之類的。
5樓:alsotang
不用深究這個問題,JS 一到探索到這個地步的話,記住兩點:
1. JS 是門設計得很差的語言
2. 應用中,能通過正常的函式等手段完成的事情,不要通過反射來完成。
你為什麼選擇 JavaScript ?
牆外一枝花 多年前,面試的時候,一邊是三年.net 給你6k,一邊是3個月js也是6k,所以沒那麼多為什麼,最初的選擇源於人性的最基本訴求,溫飽。 題葉 最開始上網,沒人教程式設計,我唯一能折騰的東西只有瀏覽器,高中用 GreenBrowser 替換了 IE 自以為很開心,後來知道 Opera,最後...
JavaScript 為什麼要把 this 暴露出來
孫竟 這是動態語言帶來的靈活性啊,Python 也是這樣。在不需要靈活性的地方,你完全可以不用 this。可是你用到了,就說明你確實需要。舉例來說,你怎麼在 C 裡傳遞乙個物件的方法?想想都覺得很麻煩。而 JS 可以把乙個函式和物件通過 Function.prototype.bind 繫結在一起 即...
我為什麼喜歡 javascript
和你有一樣的感受 從小爸媽就愛吵架,愛打架。我做過做多的事就是一邊哭一邊在他們中間拉架,求他們別再打架了。小學有乙個最好的玩伴,我最喜歡和她一起玩,我覺得自己潛意識裡是因為她的爸爸媽媽感情特別好,每次去她家玩,都能看的出來她爸媽感情很好。初中的時候去外地上學,最擔心的就是爸媽在家吵架互相掐架。最近和...