為什麼JavaScript裡面typeof null 的值是 object ?

時間 2021-05-06 02:12:36

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

和你有一樣的感受 從小爸媽就愛吵架,愛打架。我做過做多的事就是一邊哭一邊在他們中間拉架,求他們別再打架了。小學有乙個最好的玩伴,我最喜歡和她一起玩,我覺得自己潛意識裡是因為她的爸爸媽媽感情特別好,每次去她家玩,都能看的出來她爸媽感情很好。初中的時候去外地上學,最擔心的就是爸媽在家吵架互相掐架。最近和...