详解JS中的null和undefined

655 阅读2分钟

前言

JavaScript中,我们有两个特殊的值nullundefined

null

null代表一个空值,也可以表示缺少值。undefined表示一个未声明的变量或者一个声明了但未被初始化的变量。这两个值似乎很相似,但是它们之间有一些细微的差别。

null是一个在JavaScript中定义了的特殊关键字,它被用来表示一个确定的空值。如果我们想要在我们的代码中显式地表示一个缺失的值,那么我们可以使用null。

例如,如果我们有一个函数,它需要一个参数,但是这个参数不是必须的,那么我们可以使用null来表示它的缺失:

function myFunction(param) { if(param === null) { console.log("Parameter is missing");  
} else { console.log("Parameter present"); } }

myFunction(); // Parameter is missing

undefined

undefined则表示一个未声明的变量或者一个声明了但未被初始化的变量。这通常发生在我们尝试访问一个不存在的对象属性或函数参数的情况下。如果变量没有被初始化,那么它的值就是undefined。

例如,如果我们有一个对象,但是它没有一个名为“name”的属性,那么当我们尝试访问这个属性时,JavaScript会返回undefined:

var obj = {age: 20}; console.log(obj.name); // undefined

我们还可以在声明一个变量但没有初始化它的情况下,来访问这个变量:

var x; console.log(x); // undefined

比较

我们现在来看一下这两个值的比较:

var y = null;

console.log(typeof y); // object

null是一个对象,这是一个历史遗留问题,因为在JavaScript的早期版本中,null被错误地划分为对象类型。但是,这个问题已经被修复了。

console.log(null === undefined); // false console.log(null == undefined); // true console.log(null === null); // true console.log(null == null); // true

在比较null和undefined时,我们需要注意一些细节。null和undefined相等,但是它们的类型不同。当我们比较null和undefined时,使用双等号(==)就足够了,但是更好的做法是使用三等号(===),因为它会比较类型。

举例

例子1

function func(a='1'){
    console.log(a)
}

//想想以下函数执行的时候,控制台会打印出什么?
func() // ?
func(null) // ?

当 执行 func(),函数入参的 a 为 undefined ,所以会使用默认值 ,打印出 1

当 执行 func(null),函数入参的 a 为 null ,不会使用默认值 ,打印出 null

总结

  • null表示一个明确的空值
  • undefined表示缺少值或未定义的变量。

在某些情况下,这两个值是等价的,但是它们之间还有一些细微的差别。如果我们需要表示一个明确的空值,那么我们应该使用null,如果我们需要表示缺少值或未定义的变量,那么我们应该使用undefined。