TS !. 和?.的区别
他们分别叫做 非空断言和可选链操作符.
!.
和 ?.
是 TypeScript 中的两个不同的操作符,它们用于处理可能为 null
或 undefined
的值。它们的作用如下:
!.
(非空断言操作符)!.
是 TypeScript 中的非空断言操作符,用于告诉编译器某个表达式的结果不会为null
或undefined
,即使它的类型声明中包含了可能为null
或undefined
的类型。x!
告诉编译器x
不会为null
或undefined
,因此可以安全地调用x
的属性或方法。- 例如:
fileInput.value!.click()
,我们使用!.
来断言fileInput.value
不会为null
,以便可以调用其click()
方法。 - 注意:使用
!.
时要确保在使用之前进行了适当的空值检查,以避免潜在的运行时错误。
?.
(可选链操作符)?.
是 TypeScript 和 JavaScript 中的可选链操作符,用于访问可能为null
或undefined
的属性或方法,而无需手动进行空值检查。x?.prop
表示如果x
不为null
或undefined
,则访问x.prop
;如果x
为null
或undefined
,则整个表达式的结果为undefined
。- 例如:
fileInput.value?.click()
,我们使用?.
来访问fileInput.value
的click()
方法,如果fileInput.value
为null
或undefined
,则整个表达式的结果为undefined
,不会引发错误。 ?.
运算符还支持链式操作,例如:obj?.prop1?.prop2
。
总结:
!.
是非空断言操作符,用于断言一个值不会为null
或undefined
,以便可以安全地访问其属性或方法。?.
是可选链操作符,用于访问可能为null
或undefined
的属性或方法,而无需手动进行空值检查。