JavaScript null、undefined 与 undeclared 的区别?
2023年8月21日
💎 加入 E+ 成長計畫 與超過 750+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源
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