TypeScript 中 undefined 与 null 的区别及处理方式

在 TypeScript 中,undefined 和 null 是两种特殊的值。它们都表示“没有值”,但是它们之间有一些细微的区别。在本文中,我们将探讨 TypeScript 中 undefined 和 null 的区别以及处理方式。

undefined 和 null 的区别

在 TypeScript 中,undefined 表示一个变量没有被初始化或者赋值,而 null 表示一个变量被显式地赋值为 null。

在 JavaScript 中,undefined 和 null 都是 falsy 值,它们在逻辑运算中都会被当做 false。但是在 TypeScript 中,它们是不同的类型。undefined 是一种类型,null 是另一种类型。

在 TypeScript 中,一个变量可以被赋值为 undefined 或者 null,但是不能被同时赋值为这两个值。这是因为 TypeScript 中有一个严格模式,它会在编译时检查变量的类型,如果变量被赋值为 undefined 或者 null,严格模式会报错。

处理 undefined 和 null

在 TypeScript 中,我们可以使用 typeof 操作符来检查一个变量是否为 undefined 或者 null。例如:

--- ---- ------ - --------- - -----

-- ------- --- --- ------------ -
  ---------------- -- ------------
-

-- ---- --- ----- -
  ---------------- -- -------
-

我们也可以使用非空断言操作符 ! 来告诉 TypeScript,一个变量一定不是 undefined 或者 null。例如:

--- ---- ------ - --------- - -----

-------------------------

上述代码中,我们使用了非空断言操作符 ! 来告诉 TypeScript,foo 一定不是 undefined 或者 null,因此我们可以直接使用它的 length 属性。

但是需要注意的是,使用非空断言操作符 ! 时需要非常小心。如果我们错误地使用了它,可能会导致运行时错误。

另外,我们也可以使用可选链操作符 ?. 来安全地访问一个可能为 undefined 或者 null 的属性。例如:

--- ---- - ----- - ----- ------ - - - ---

--------------------------

上述代码中,我们使用了可选链操作符 ?. 来安全地访问 foo.bar.baz 属性。如果 foo.bar 或者 foo.bar.baz 为 undefined 或者 null,那么 console.log 语句不会执行,也不会报错。

总结

在 TypeScript 中,undefined 和 null 都表示“没有值”,但是它们之间有一些细微的区别。undefined 表示一个变量没有被初始化或者赋值,而 null 表示一个变量被显式地赋值为 null。我们可以使用 typeof 操作符来检查一个变量是否为 undefined 或者 null,也可以使用非空断言操作符 ! 或者可选链操作符 ?. 来处理它们。需要注意的是,在使用非空断言操作符 ! 时需要非常小心,避免出现运行时错误。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65e16aea1886fbafa4e69fbe