JavaScript null、undefined 与 undeclared 的区别?

2023年8月21日

💎 加入 E+ 成長計畫 與超過 300+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

undefined 与 null 的区别 ?

undefined 表示还未定义值,所以当一个变数被宣告但还未被赋予任何值之前,这个变数就会是 undefined,可以理解为「尚未」。

null 代表的是一个变数的空值,可以理解为「没有」

undefinednull 在 JavaScript 中,都是属于原始资料类型(primitive data types) 之一,也就像任何其他资料类别(data types),例如:stringnumber一样,可以被赋予在变数上。两者在使用上,两者会有不同的意义。

举例来说,当前端要向后端索取资料时,因为需要等待资料回传,所以某个变数一开始可能是 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 是指从未被宣告过

当一个变数并没有使用 varletconst 宣告过时,若我们试图呼叫此变数时,会报 ReferenceError的错误。因此在写程式时,要避免使用 undeclared 的变数。

console.log(x); // Uncaught ReferenceError: x is not defined
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們