Проверьте наличие неопределенного свойства в объекте в EJS в Node.JS - PullRequest
0 голосов
/ 20 мая 2018

У меня есть объект, который называется user, у которого могут быть или не быть определены подвойства.Например, иногда нет объекта "pages", иногда вы можете перейти к user.pages.someothervariable.

Я могу видеть в EJS, как проверить, существует ли этот пользователь, но как я могу проверить, что user.pages.someothervariable существует без получения ошибки «невозможно получить доступ к свойству undefined».

Я пробовал это и typeof, но не могу заставить его работать.

<% if(locals.user.pages.pageVisits){ %>foo defined<% }else{ %>foo undefined<% } %>

Я получаю эту ошибку:

Cannot read property 'pageVisits' of undefined

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Вы можете использовать короткое замыкание && -

if(locals.user.pages && locals.user.pages.pageVisits) { /* do sth */ }

Если user.pages ложно, оценка не будет продолжена.

Если цепь становится слишком длинной,вы можете попытаться инкапсулировать его в функцию, например -

function getPage(user) {
    return (user && user.pages && user.pages.accountPage)
        || "0"; // a fallback if the left side is falsy
}
0 голосов
/ 20 мая 2018

Вы можете проверить, есть ли у вашего пользователя поле страниц, запустив if(local.user.pages).Это потому, что почти любое значение может быть оценено в операторах if в JS.Если user.pages равно null, то оператор if вернет false.Если user.pages существует, он вернет true.

Вы можете сделать попытку, чтобы избежать беспорядка:

var obj = {
  test: "hello"
}

try {
  console.log(obj.fakeKey.otherFakeKey)
}
catch(ex) {
  console.log("Caught")
}
...