2013-06-30 38 views
1

我分析JavaScript的數據類型,我發現非常奇怪的事情:JavaScript的空值 - 它是一個對象

> typeof null 
"object" 
> null instanceof Object 
false 

目前我還是不知道我怎麼能解釋。我認爲typeof === "object"的所有產品在原型鏈中都有Object.prototype。如果null不是object,那麼爲什麼typeof會返回?

PS有人已經給我寫歡迎的JavaScript的古怪的世界;)

+0

http://stackoverflow.com/a/7968470/594589 – dm03514

+0

在一個稍微有關說明,看看'的Object.create(空)' – SLaks

+0

@SLaks是略有不同,但是,因爲你說「新對象的原型不應該是任何東西」,並且「Object.create(null).__ proto__」實際上被設置爲「null」。 –

回答

2

這有歷史的原因:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#null

的typeof空=== '對象'; //自JavaScript開始以來就一直如此 在JavaScript的第一個實現中,JavaScript值被表示爲一個類型標記和一個值。對象的類型標記爲0. null表示爲空指針(0x00是大多數平臺)。因此,null具有0作爲類型標記,因此是返回值的假類型。 (參考需要)

一個修復提出了的ECMAScript(經由一個選擇),但被拒絕。它會導致typeof null ==='null'。

+0

感謝您的回覆,我已經接受了,但是......我仍然不知道答案。 'null'是一個對象嗎?據我瞭解,這不是,對吧? – ducin

+1

右,它不是一個[對象](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6),這是一個[原始值](HTTP://www.ecma-international .org/ecma-262/5.1 /#sec-4.3.2)類型['Null'](http://www.ecma-international.org/ecma-262/5.1/#sec-8.2),以及在完美的世界中'typeof null'會返回'null'。 – ndm

+0

完美的解釋,謝謝! – ducin

相關問題