如何检查对象及其属性是否存在?

Rad*_*ity 2 javascript ecmascript-5 ecmascript-6

我从 API 调用收到一个对象。我想检查:

  1. 如果对象存在
  2. 对象的属性是否具有我正在寻找的属性

假设我期待以下对象:

success.response.data.users.items.list
Run Code Online (Sandbox Code Playgroud)

现在我想知道这个list对象是否存在。

我试过了:

  • typeof success.response.data.users.items.list !== "undefined"

    我得到的错误: TypeError: Cannot read property 'data' of undefined

  • success.hasOwnProperty("response.data.users.items.list")

    这始终评估为 false,因为 hasOwnProperty 显然无法检查多级对象。

  • success.response.data.users.items.hasOwnProperty("list")

    我得到的错误: TypeError: Cannot read property 'data' of undefined

有没有任何现代和快速的方法来检查这个?

Wil*_*ins 6

如果它是您的选择,可选链可行的方法:

success?.response?.data?.users?.items?.list || {} 
Run Code Online (Sandbox Code Playgroud)

如果没有,您只需要在尝试访问子属性之前检查每个对象是否存在,或者使用带有默认值的 ES6 解构(尽管对于深度嵌套的对象非常棘手):

const { response: { data: { users: { items: { list = {} } = {} } = {} } = {} } = {} } = success || {}
Run Code Online (Sandbox Code Playgroud)