发布于 4年前

JavaScript里null与undefined的区别与相似点

初次看,null和undefined看似是一样的,但远非如此。 本文将探讨JavaScript中null和undefined的区别和相似之处。

null是什么?

有两个你应该理解的null特性:

  • null是空的或不存在的值。
  • null必须显式赋值。

将null的值赋给a示例:

let a = null;
console.log(a);
// 输出null

undefined是什么?

Undefined最典型的是指一个变量已被声明,但未被定义。

let b;
console.log(b);
// 输出undefined

你也可以显式设置一个变量为undefined:

let c = undefined;
console.log(c);
// undefined

最后,在Object对象中查找不存在的属性时,也会得到undefined:

var d = {};
console.log(d.fake);
// undefined

null和undefined的相似点

在JavaScript中只有六个表示false的值。 null和undefined是其中的两个。 这是表示false值得完整列表:

  • false
  • 0
  • "" (空字符串)
  • null
  • undefined
  • NaN

JavaScript中的任何其他值都被认为是true。

同样在JavaScript中,有六个基本值。 null和undefined都是基本值。 这是一个完整的列表:

  • Boolean
  • Null
  • Undefined
  • Number
  • String
  • Symbol

JavaScript中的所有其他值都是Object(对象,函数,数组等)。

有趣的是,当使用typeof来检测null时,它返回object:

let a = null;
let b;
console.log(typeof a);
// object
console.log(typeof b);
// undefined

这从JavaScript开始就已经发生,通常认为这是原始JavaScript实现的一个错误。

null !== undefined

正如你目前所看到的,null和undefined是不同的,但是有一些相似之处。 因此,null并不严格等于undefined。

null !== undefined 

但是,这可能会让你感到惊讶,null松散地等于undefined。

null == undefined

在JavaScript中,使用松散相等(==)比较会做类型转换。 它会隐含将值转换为常用类型后再做比较。

实际区别

所有这些都很好,但是null和undefined之间的实际区别呢?

想想下面的代码片段:

let logHi = (str = 'hi') => {
  console.log(str);
}

上面的代码创建了logHi函数。 这个函数需要一个参数,如果没有提供,那么将这个参数默认设置为hi。如下:

logHi();
// hi

我们也可以提供一个参数来覆盖这个默认值:

logHi('bye');
// bye

如果传undefined,默认参数会用默认值,而null则不会。

logHi(undefined);
// hi
logHi(null);
// null

总结

  • null是被赋值的值。 表示什么都没有。
  • undefined最典型的是指一个变量已被声明,但未被定义。
  • null和undefined都是false值。
  • null和undefined都是基本类型的值。 但是,有一个错误就是执行typeof null为object。
  • null !== undefined 但是 null == undefined。
©2020 edoou.com   京ICP备16001874号-3