Skip to content

TS !. 和?.的区别

他们分别叫做 非空断言和可选链操作符.

!.?. 是 TypeScript 中的两个不同的操作符,它们用于处理可能为 nullundefined 的值。它们的作用如下:

  1. !. (非空断言操作符)

    • !. 是 TypeScript 中的非空断言操作符,用于告诉编译器某个表达式的结果不会为 nullundefined,即使它的类型声明中包含了可能为 nullundefined 的类型。
    • x! 告诉编译器 x 不会为 nullundefined,因此可以安全地调用 x 的属性或方法。
    • 例如:fileInput.value!.click(),我们使用 !. 来断言 fileInput.value 不会为 null,以便可以调用其 click() 方法。
    • 注意:使用 !. 时要确保在使用之前进行了适当的空值检查,以避免潜在的运行时错误。
  2. ?. (可选链操作符)

    • ?. 是 TypeScript 和 JavaScript 中的可选链操作符,用于访问可能为 nullundefined 的属性或方法,而无需手动进行空值检查。
    • x?.prop 表示如果 x 不为 nullundefined,则访问 x.prop;如果 xnullundefined,则整个表达式的结果为 undefined
    • 例如:fileInput.value?.click(),我们使用 ?. 来访问 fileInput.valueclick() 方法,如果 fileInput.valuenullundefined,则整个表达式的结果为 undefined,不会引发错误。
    • ?. 运算符还支持链式操作,例如:obj?.prop1?.prop2

总结:

  • !. 是非空断言操作符,用于断言一个值不会为 nullundefined,以便可以安全地访问其属性或方法。
  • ?. 是可选链操作符,用于访问可能为 nullundefined 的属性或方法,而无需手动进行空值检查。