在 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。例如:
let foo: string | undefined | null; console.log(foo!.length);
上述代码中,我们使用了非空断言操作符 !
来告诉 TypeScript,foo 一定不是 undefined 或者 null,因此我们可以直接使用它的 length 属性。
但是需要注意的是,使用非空断言操作符 !
时需要非常小心。如果我们错误地使用了它,可能会导致运行时错误。
另外,我们也可以使用可选链操作符 ?.
来安全地访问一个可能为 undefined 或者 null 的属性。例如:
let foo: { bar?: { baz?: string } } = {}; console.log(foo.bar?.baz);
上述代码中,我们使用了可选链操作符 ?.
来安全地访问 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