非空断言运算符不起作用
Non-null assertion operator is not working
运行时错误:
TypeError: Cannot read property 'id' of undefined
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。但是,它仍然给出了上述错误。有什么线索吗?
non-null assertion operator
不会确保如果您的数据是'incorrect'.
,您将不会收到任何错误
它适用于类型,不适用于实际数据。
它仅适用于 creating/adjusting 您的类型。
然而,如果你想在 projects[0]
不存在的情况下简单地获取 undefined
(因此,不会抛出错误),你可以使用 optional chaining operator,它将降落在 3.7.
因此,您将能够像这样使用它:
this.authenticationProvider.member?.projects[0]?.id
并且如果 projects[0]
是 undefined
,整个表达式的计算结果将是 undefined
,您不会得到任何错误。
就像评论中提到的,空断言运算符....运算符告诉编译器这个值在运行时肯定会有一个值,所以在运行时错误会发生。
所以错误....
TypeError: Cannot read property 'id' of undefined
很明显...
this.authenticationProvider.member.projects[0]
是undefined
。很好,它通过了 if 你有,因为你没有检查数组的长度:
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)
运行时错误:
TypeError: Cannot read property 'id' of undefined
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。但是,它仍然给出了上述错误。有什么线索吗?
non-null assertion operator
不会确保如果您的数据是'incorrect'.
,您将不会收到任何错误
它适用于类型,不适用于实际数据。
它仅适用于 creating/adjusting 您的类型。
然而,如果你想在 projects[0]
不存在的情况下简单地获取 undefined
(因此,不会抛出错误),你可以使用 optional chaining operator,它将降落在 3.7.
因此,您将能够像这样使用它:
this.authenticationProvider.member?.projects[0]?.id
并且如果 projects[0]
是 undefined
,整个表达式的计算结果将是 undefined
,您不会得到任何错误。
就像评论中提到的,空断言运算符....运算符告诉编译器这个值在运行时肯定会有一个值,所以在运行时错误会发生。
所以错误....
TypeError: Cannot read property 'id' of undefined
很明显...
this.authenticationProvider.member.projects[0]
是undefined
。很好,它通过了 if 你有,因为你没有检查数组的长度:
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)