myvariable.subproperty?.value
和myvariable.subproperty!.value
之间有什么区别如果子属性为null,则似乎两者都执行,从而传递null值。我知道断言运算符通常意味着什么,只是不确定当你像这样链式调用属性时它意味着什么。谢谢
object?.value
是JavaScript语法,并且将:
- 如果
object
为null或未定义,则计算为undefined
- 否则,将访问对象的
value
属性
object!.value
是TypeScript语法,并且将:
- 向TypeScript编译器断言
object
既不是null也不是未定义的 - 无条件地尝试访问对象的
value
属性
如果对象可能为null或未定义,?.
是正确的方法,因为如果使用!
,可能会导致运行时错误。(只有当您绝对确定左侧的表达式将始终存在时,才使用!
,并且您需要向TypeScript编译器指示这一点(