如果对象未定义,如何检查特定键是否未定义?

How do I check if a specific key is undefined if the object is undefined?

我想做什么?

我想检查一个特定的键是否是 undefined,但不能,因为对象的更高级别是 undefined

目前尝试执行此操作的代码是什么?

character 对象的结构是(在另一个存在的对象中):

{
  ...
  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.archerundefined(目前),我无法继续检查 character.archer.description

您可以使用optional chaining operator that all evergreen browsers today support。您只需在 . 之前为每个可能返回 undefined(或 null,实际上也有效)的级别添加 ?

您的代码示例:

if (character?.archer?.description !== undefined) { ... } 

这正是可选链接运算符的用途!它看起来像这样 ?. 如果定义了左手,它将 return 右手参数,否则它将 return 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