2013-06-30 41 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

相关问题