Подтвердить что ты не робот

Как вы можете проверить свойство undefined в ejs для node.js?

Каков наилучший способ проверить свойство undefined в шаблоне ejs?

(Я использую node.js пакет от TJ Holowaychuk)

Пример:

var tpl = '<% if (foo) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz" } }));

Я ожидаю, что это сделает "foo undefined". Вместо этого он выдает ошибку foo undefined.

Я знаю, что это не должно быть проблемой, так как это ожидаемое поведение в тестах. Есть ли простой способ избежать этого?

Единственное найденное мной решение - использовать метод hasOwnProperty.

var tpl = '<% if (hasOwnProperty("foo")) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));

Это не вызывает никаких ошибок.

Есть ли лучший способ сохранить шаблон в чистоте? Или почему это ошибка?

4b9b3361

Ответ 1

Другой способ проверить свойство - косвенно ссылаться на него с помощью объекта locals. Используя ваш пример:

var tpl = '<% if(locals.foo){ %>foo defined<% }else{ %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));

Ответ 2

Я использовал бы typeof, как в if (typeof foo == 'undefined'). Я использую оператор typeof со строкой "undefined", тогда как некоторые люди могут напрямую сравнивать с глобальной переменной undefined. Я предпочитаю этот метод, потому что он защищен от какого-либо разработчика библиотеки террористических JS, изменяя значение глобальной переменной, оставляя ваш код сломанным.

Это также может быть выражено как тройной, что некоторые считают "чище" из-за отсутствия завитушек:

var tpl = '<% (typeof foo != "undefined" ? %>foo defined<% : %>foo undefined<% ) %>';

Ответ 3

Простейший и самый чистый по моему мнению:

<%= (!!locals.foo)?foo:'' %>