Как проверить, существует ли Объект и его свойства? - PullRequest
0 голосов
/ 08 марта 2020

Я получаю объект от вызова API. Я хочу проверить:

  1. Если объект существует
  2. Имеет ли свойство объекта свойство, которое я ищу, или нет

Допустим, что Я ожидаю следующий объект объектов:

success.response.data.users.items.list

Теперь я хочу знать, существует этот объект list или нет.

Я пытался:

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

    Ошибка, которую я получил: TypeError: Cannot read property 'data' of undefined

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

    Это всегда оценивается как ложное, потому что hasOwnProperty не может явно проверить многоуровневые объекты.

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

    Ошибка, которую я получил: TypeError: Cannot read property 'data' of undefined

Есть ли современный и быстрый способ проверить это?

Ответы [ 2 ]

4 голосов
/ 08 марта 2020

Если это вариант для вас, необязательная цепочка - это путь к go:

success?.response?.data?.users?.items?.list || {} 

, если нет, вам просто нужно проверить, что каждый объект существует, прежде чем пытаться получить доступ к дочернему свойству или использовать деструктуризацию ES6 со значениями по умолчанию (хотя и довольно грубыми для глубоко вложенных объектов):

const { response: { data: { users: { items: { list = {} } = {} } = {} } = {} } = {} } = success || {}
2 голосов
/ 08 марта 2020

Если опциональная цепочка не является опцией, вы можете использовать что-то в этих строках:

success && success.response && success.response.data && 
success.response.data.users && success.response.data.users.items && success.response.data.users.items.list
...