乍一看,null和undefined看起来可能相同,但它们远非如此。本文将探讨JavaScript中null和undefined之间的差异和相似之处。
什么是nullnull有两个特性需要明白:
- null是空值或不存在的值
- 必须指定null
下面是一个例子,将null赋值给变量a
let a = null; console.log(a); // null
什么是undefinedundefined最通常意味着已声明变量,但未定义变量。例如:
let b; console.log(b); // undefined
也可以显式设置变量等于undefined:
let c = undefined; console.log(c); // undefined
最后,当查找对象中不存在的属性时,将收到undefined:
var d = {}; console.log(d.fake); // undefined
null和undefined之间的相似之处在JavaScript中,只有六个假值。 null和undefined都是六个假值中的两个。下面是一个完整的清单:
- false
- 0 (zero)
- "" (empty string)
- null
- undefined
- NaN (Not A Number)
JavaScript中的任何其他值都被认为是真实的。同样在JavaScript中,有六个原始值。 null和undefined都是原始值。这是一个完整的清单:
- Boolean
- Null
- Undefined
- Number
- String
- Symbol
JavaScript中的所有其他值都是对象(对象,函数,数组等)。
有趣的是,当使用typeof测试null时,它返回对象:
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松散地等于未定义。
null == undefined
在JavaScript中,double等于测试松散相等和预成型类型强制。这意味着我们在将它们转换为通用类型后比较两个值。
实际差异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是假值。
- null和undefined都是原语。但是,错误显示 typeof null = object。
- null !== undefined 但 null == undefined。