Difference between null / undefined / not defined?
null vs undefined vs not defined 差在哪?
前言
JavaScript 当中 null
与 undefined
两者都代表着存取的值不存在,甚至使用鬆散比較 ==
时,两者也会被视为相等。但是在根本上两者是截然不同的东西,藉由这篇文章我来厘清解释他们两者之间的关系。
console.log(null == undefined); // trueconsole.log(null === undefined); // false
Null
null
意味着「存在但没有东西」,只能透过明确的赋予 null
来得到它。所以当拿到 null
数值时代表是开发者有意识的赋予,而不是因为其他原因而产生。比如说一个搜索功能,如果没有搜索到任何结果,那么就可以赋予 null
来代表结果没有任何东西。
const search = null;console.log(search); // null
Undefined
undefined
意味着「不存在没东西」,默认情况下所有的变量都是 undefined
,除非明确的赋予了其他的值之前它都会是 undefined
。所以当拿到这个值大多数时候代表该数值真实意义上不存在。
let foo;console.log(foo); // undefined
Not Defined
除了 null
与 undefined
,还有另一个情境:not defined。这并不是一个具体的值,而是当你尝试存取一个根本没声明的变量时会直接抛出 not defined 错误。
console.log(bar); // ❌ ReferenceError: bar is not defined
总结
两者之间的差异只在于开发者的「意图」,虽然都代表「没东西」,但一个是「存在」一个是「不存在」,大多数时候会希望定义 null
。
奇怪的是实际上 undefined
可以被定义出来,定义定义上不存在的东西,是一件很奇怪但可行的事情,尽量不要这么做 😅 。