运行时错误:
TypeError:无法读取未定义的属性“ id”
if (!this.havingMultipleProjects) {//having only 1 project or not at all
if (this.authenticationProvider.member.projects != null)
this.projectProvider.projectId = this.authenticationProvider.member!.projects[0]!.id;
}
您能告诉我如何避免上述错误吗?我用过Non-null assertion operator。但是仍然会出现上述错误。有任何线索吗?
答案 0 :(得分:1)
non-null assertion operator
不会不会确保您的数据“不正确”不会出错。
它适用于类型,不适用适用于实际数据。
只是用于创建/调整类型。
但是,如果您只想获取undefined
(因此不会抛出错误),以防projects[0]
不存在,则可以使用optional chaining operator,它将落入 3.7 。
因此,您将可以像这样使用它:
this.authenticationProvider.member?.projects[0]?.id
如果projects[0]
是undefined
,则整个表达式的结果将为undefined
,并且不会出错。
答案 1 :(得分:1)
像注释中提到的那样,空断言运算符。...该运算符告诉编译器此值在运行时肯定具有一个值,因此在运行时会发生错误。
所以是错误。...
TypeError:无法读取未定义的属性“ id”
显然然后...
this.authenticationProvider.member.projects[0]
是undefined
。好的,如果没有,它将通过,因为您没有检查数组的长度:
if (this.authenticationProvider.member.projects != null)
因此,如果projects
为[]
我只想做if (this.authenticationProvider.member.projects)
,包括检查它是否存在,总共覆盖null
,undefined
,false
。然后在那之后再检查数组中是否确实存在一个对象,因此您的if
语句可能看起来像:
if (this.authenticationProvider.member.projects && this.authenticationProvider.member.projects.length)
如果您不确定甚至member
是否存在,也应该对此进行额外检查...
if (this.authenticationProvider.member &&
this.authenticationProvider.member.projects &&
this.authenticationProvider.member.projects.length)