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。