JavaScript 中 null、undefined 与 undeclared 的区别

96 阅读1分钟

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 属性的类型应为 null` ,表示“不存在”。

profilePicture: string | null;

而不是

profilePicture: string | undefined;

undefined 与 undeclared 的区别 ?

undeclared undefined 经常被比较, undefined 表示一个已声明但未初始化的变量的值,而 undeclared 指的是一个从未被声明过的变量。

当一个变量并没有使用 varletconst 声明过时,若我们试图调用此变量时,会报 ReferenceError 的错误。因此在写程序时,要避免使用 undeclared 的变量。

console.log(x); // Uncaught ReferenceError: x is not defined