JavaScript null、undefined 与 undeclared 的区别?
2023年8月21日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
undefined 与 null 的区别 ?
undefined
表示还未定义值,所以当一个变数被宣告但还未被赋予任何值之前,这个变数就会是 undefined
,可以理解为「尚未」。
null
代表的是一个变数的空值,可以理解为「没有」。
undefined
和null
在 JavaScript 中,都是属于原始资料类型(primitive data types) 之一,也就像任何其他资料类别(data types),例如:string
、number
一样,可以被赋予在变数上。两者在使用上,两者会有不同的意义。
举例来说,当前端要向后端索取资料时,因为需要等待资料回传,所以某个变数一开始可能是 undefined
,当资料回来时,就会变成该资料型态。以下面的例子来说,我们有个变数 users
,定义它的型别为
UserDTO[] | undefined
而不是
UserDTO[] | null
正是因为在拿到资料前, users
是「尚未」。
type UserDTO = {
id: string,
firstName: string,
lastName: string,
profilePicture: string | null,
};
const users: UserDTO[] | undefined = await fetchUsers();
反之亦然,上面的例子中,当拿到了 users
,有些使用者没有大头照,因为是「没有」,所以 profilePicture
的型别是
profilePicture: string | null;
而不是
profilePicture: string | undefined;
undefined 与 undeclared 的区别 ?
undeclared
常会拿来 undefined
做比较,undefined
表示已宣告值是「未定义」,但 undeclared
是指从未被宣告过。
当一个变数并没有使用 var
、let
或 const
宣告过时,若我们试图呼叫此变数时,会报 ReferenceError
的错误。因此在写程式时,要避免使用 undeclared
的变数。
console.log(x); // Uncaught ReferenceError: x is not defined