null 和 undefined

JavaScript 有多种方式来表示值的缺失。此页面介绍了两种最常见的方式:nullundefined 数据类型。

null

null 关键字表示有意定义的值的缺失。null 是一个原始值,尽管 typeof 运算符返回 null 是一个对象。这是一个从 JavaScript 的第一个版本遗留下来的 错误,并且为了避免破坏 Web 上的预期行为而被有意地未解决。

typeof null
> object

您可以将变量定义为 null,期望它反映脚本中某时分配给它的值或显式缺失的值。您还可以将 null 值分配给现有引用以清除先前的值。

undefined

undefined 是分配给刚声明的变量的原始值,或者分配给不返回有意义值的操作的结果值。例如,当您在浏览器的开发者控制台中声明函数时,可能会发生这种情况

function myFunction() {}
> undefined

当函数的 return 语句不返回值时,它会显式返回 undefined

(function() {
    return;
}());
> undefined

nullundefined 的比较

尽管 undefinednull 有一些功能重叠,但它们有不同的用途。从最严格的意义上讲,null 表示有意定义为“空白”的值,而 undefined 表示缺少任何已赋值的值。

nullundefined松散相等,但并非严格相等。松散相等运算符将不同类型的操作数强制转换为布尔值,使 nullundefined 都为 false。严格相等运算符认为不同数据类型的操作数不相等。

null == undefined
> true

null === undefined
> false

与保留关键字 null 不同,undefined全局对象的属性。这是 JavaScript 开发早期做出的设计决策,它允许旧版浏览器完全覆盖 undefined。在现代浏览器中,仍然可以在非全局作用域中使用 undefined 作为标识符,从而覆盖其在该声明作用域内的值。永远不要undefined 用作标识符。它可能会导致意外行为,并且很可能使您代码库的未来维护者感到困惑。

检查您的理解情况

typeof null 返回什么?

object
undefined
primitive
string