JavaScript 有多种方式来表示值的缺失。此页面介绍了两种最常见的方式:null
和 undefined
数据类型。
null
null
关键字表示有意定义的值的缺失。null
是一个原始值,尽管 typeof
运算符返回 null
是一个对象。这是一个从 JavaScript 的第一个版本遗留下来的 错误,并且为了避免破坏 Web 上的预期行为而被有意地未解决。
typeof null
> object
您可以将变量定义为 null
,期望它反映脚本中某时分配给它的值或显式缺失的值。您还可以将 null
值分配给现有引用以清除先前的值。
undefined
undefined
是分配给刚声明的变量的原始值,或者分配给不返回有意义值的操作的结果值。例如,当您在浏览器的开发者控制台中声明函数时,可能会发生这种情况
function myFunction() {}
> undefined
当函数的 return
语句不返回值时,它会显式返回 undefined
。
(function() {
return;
}());
> undefined
null
和 undefined
的比较
尽管 undefined
和 null
有一些功能重叠,但它们有不同的用途。从最严格的意义上讲,null
表示有意定义为“空白”的值,而 undefined
表示缺少任何已赋值的值。
null
和 undefined
是松散相等,但并非严格相等。松散相等运算符将不同类型的操作数强制转换为布尔值,使 null
和 undefined
都为 false
。严格相等运算符认为不同数据类型的操作数不相等。
null == undefined
> true
null === undefined
> false
与保留关键字 null
不同,undefined
是全局对象的属性。这是 JavaScript 开发早期做出的设计决策,它允许旧版浏览器完全覆盖 undefined
。在现代浏览器中,仍然可以在非全局作用域中使用 undefined
作为标识符,从而覆盖其在该声明作用域内的值。永远不要将 undefined
用作标识符。它可能会导致意外行为,并且很可能使您代码库的未来维护者感到困惑。
检查您的理解情况
typeof null
返回什么?
object
undefined
primitive
string