为什么typeof null是"object"?

370

我正在阅读《Web开发专业JavaScript》第四章,书中告诉我原始类型有五种: undefined, null, boolean, number和string。

既然null是一种原始类型,那么为什么typeof(null)会返回"object"

这是否意味着null被按引用传递(我在这里假设所有对象都是按引用传递),从而使其不是一种原始类型?


101
回答:因为规格书上是这么写的。这通常被视为错误。 - SLaks
7
注意,typeof是一个操作符而不是函数(实际上你可以省略它后面的括号),因此在这里谈论传递引用是没有意义的。书籍《JavaScript: The Good Parts》在附录A的A.6节“糟糕的部分”中实际上提到了typeof null === 'object'的事实。 - John Sonderson
2
那么,除了使用 typeof 来检查变量所持有的值的类型之外,我们应该使用什么呢?我很想知道它是在 (boolean、string、number、array、object、function、symbol、null、undefined、NaN) 中的哪一个。 - Costa Michailidis
3
顺便说一下,typeof 是一个操作符而不是一个函数,因此你的代码中的括号是不必要的 - 你可以直接使用语法 typeof null - Oliver Sieweke
2
我建议在您的代码库中进行查找和替换,从 (typeof +(\w+) +={2,3} +"object")($2 && $1),以便在可能存在的任何地方修复此问题。这将把 typeof arg === "object" 转换为 (arg && typeof arg === "object") - Seph Reed
显示剩余3条评论
11个回答

-1
在JavaScript中,typeof null的值是'object',这错误地暗示了null是一个对象。这是一个bug,而且不幸的是无法修复,因为这样做会破坏现有的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接