如何解决如果对象未定义,如何检查特定键是否未定义?
我想做什么?
我想检查特定键是否为 undefined
,但无法检查,因为对象的更高级别是 undefined
。
目前尝试这样做的代码是什么?
{
...
character: {
...,archer: {
...,description: "shoots things"
}
}
}
我只想这样做,但会导致错误。
if (character.archer.description !== undefined) { ... }
我已实施但希望优化的修复是这样的:
...
if (character !== undefined) {
if (character.archer !== undefined) {
if (character.archer.description !== undefined) {
setDescription(character.archer.description);
}
}
}
...
我期望结果是什么?
我希望代码能够意识到 if 语句应该运行,即使 undefined
of undefined
,一般来说应该意味着 undefined
。
实际结果如何?
TypeError: Cannot read property 'undefined' of undefined.
我认为可能是什么问题?
由于 character.archer
是 undefined
(目前),我无法继续检查 character.archer.description
。
解决方法
您可以使用 optional chaining operator 和 all evergreen browsers today support。您只需在每个可能返回 ?
(或 .
,实际上,这也有效)的级别的 undefined
之前添加 null
。
代码示例:
if (character?.archer?.description !== undefined) { ... }
,
这正是可选链运算符的用途!它看起来像这样 ?.
,如果定义了左手,它将返回右手参数,否则将返回 undefined
useEffect(() => {
const description = character?.archer?.description;
if (description !== undefined) {
setDescription(description);
}
},[]);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。