在 JavaScript 中,null 不是对象,尽管 typeof null 返回 "object",但这是一个历史遗留的 bug,而非设计意图。以下是详细解释:
1. typeof null 的怪异行为
console.log(typeof null);
// "object" (这是错误的!)
-
这是 JavaScript 的一个已知 bug,源自早期语言实现时的错误。
-
在 JavaScript 最初的版本中,值的类型标签存储在低位字节中。null 的二进制表示是全 0,而对象类型的标签恰好也是 0,导致 typeof 错误地将 null 判断为 object。
-
这个 bug 无法修复,因为修复它会破坏大量现有代码。
2. null 的真实类型
-
null 是一个原始值,属于 JavaScript 的 7 种原始类型之一。
-
它表示“空”或“不存在”的引用,通常用于显式清除变量的值。