null 和 undefined

JavaScript 有多种方法可以指示值缺失。本页面介绍了两种最常见的方式:nullundefined 数据类型。

null

null 关键字表示故意定义的缺少值。null 是一个基元,不过 typeof 运算符返回 null 是一个对象。这是从 JavaScript 的第一个版本继承而来的错误,因此我们特意保留了此错误,以避免破坏预期在网络上的行为。

typeof null
> object

您可以将变量定义为 null,并预期该变量反映的是脚本中某个时间点赋值的值或明确不存在的值。您还可以将 null 值分配给现有引用,以清除之前的值。

undefined

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

function myFunction() {}
> undefined

当函数的 return 语句未返回任何值时,函数会明确返回 undefined

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

null”与“undefined”的比较

虽然 undefinednull 在功能上有所重叠,但它们的用途不同。严格来说,null 表示特意定义为“空白”的值,undefined 表示缺少任何赋值。

nullundefined 松散相等,但并不严格相等。松散等式运算符会将不同类型的运算数强制转换为布尔值,从而使 nullundefined 均为 false。严格的等式运算符将不同数据类型的运算数视为不相等。

null == undefined
> true

null === undefined
> false

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

检查您的掌握程度

typeof null 会返回什么?

object
undefined
primitive
string