У меня была такая же проблема, и, к счастью, я обнаружил, что в JS есть также функция короткого замыкания (я знал, что она была в Ruby и некоторых других языках).
На моей стороне сервера / контроллера (это из Node.js / Express):
return res.render('result', {survey_result : req.session.survey_result&&req.session.survey_result.survey });
Видите, что я там делал?Символ &&, который следует за возможно неопределенной переменной (т. Е. request.session.survey_result
объект, который может иметь или не иметь данные формы), является обозначением короткого замыкания в JS.Он только оценивает часть, которая следует за &&, если часть слева от && НЕ является неопределенной.Также не выдает ошибку, когда левая часть IS undefined
.Он просто игнорирует это.
Теперь, в моем шаблоне (помните, что я передал объект req.session.survey_result_survey
объект моему представлению как survey_result
), а затем я представил поля как:
<table>
<tr>
<td> Name:</td>
<td> <%=survey_result&&survey_result.name%></td>
</tr>
<tr>
<td> Dojo Location:</td>
<td> <%=survey_result&&survey_result.dojo_loc%></td>
</tr>
<tr>
<td> Favourite Language:</td>
<td> <%=survey_result&&survey_result.fave_lang%></td>
</tr>
Я также использовал там короткое замыкание, просто для сохранности.
Когда я попробовал это с ранее предложенными способами, просто:
<% if (typeof survey_result !== undefined) { %>
... <!-- some js and/or html code here -->
<% } %>
Иногда он все равно пытался бы оценить свойства в выражении IF ... Может быть, кто-то может предложить объяснение какпочему?
Кроме того, я хотел исправить, что undefined
должен быть без одинарных кавычек, как я видел в предыдущих примерах.Поскольку условие никогда не будет оцениваться как true
, так как вы сравниваете строковое значение 'undefined'
с типом данных undefined
.