Javascript 如何在ejs for node.js中检查未定义的属性?
检查ejs模板中未定义属性的最佳方法是什么 (我用的是TJ Holowaychuk的) 例如:Javascript 如何在ejs for node.js中检查未定义的属性?,javascript,node.js,undefined,ejs,Javascript,Node.js,Undefined,Ejs,检查ejs模板中未定义属性的最佳方法是什么 (我用的是TJ Holowaychuk的) 例如: var tpl = '<% if (foo) { %>foo defined<% } else { %>foo undefined<% } %>'; console.log(ejs.render(tpl, { locals: { bar: "baz" } })); 这不会抛出任何错误 有没有更好的方法保持模板干净?或者它为什么会抛出这个错误?我会使用typeof,
var tpl = '<% if (foo) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz" } }));
这不会抛出任何错误
有没有更好的方法保持模板干净?或者它为什么会抛出这个错误?我会使用
typeof
,就像if(typeof foo=='undefined')
一样。我将typeof
运算符与字符串“undefined”一起使用,而有些人可能会直接与undefined
全局变量进行比较。我更喜欢这种方法,因为它可以防止一些恐怖的JS库开发人员更改全局变量的值,从而导致代码崩溃
这也可以表示为三元,由于没有卷曲,一些人认为这是“更干净的”:
var tpl = '<% (typeof foo != "undefined" ? %>foo defined<% : %>foo undefined<% ) %>';
var tpl='foo definedfoo undefined';
测试属性的另一种方法是通过locals
对象间接引用它。以您的例子:
var tpl = '<% if(locals.foo){ %>foo defined<% }else{ %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
var tpl='foo definedfoo undefined';
log(ejs.render(tpl,{locals:{bar:baz}}));
在我看来最简单、最干净:
早期版本的EJS仅支持locals
但是
现在在最新版本的EJS支持中res.locals
三元算子采样-
<%= (res.locals.foo)?"foo":"" %>
如果有的话,请取样-
<% if (res.locals.urvariable) { %>
<h1><%= urvariable.value1 %></h1>
<% } else { %>
<h1><%= urvariable.value2 %></h1>
<% } %>
这是可行的,也许它是正式正确的。但是我个人不喜欢它,因为它对于我的模板来说太长了。请注意,这是唯一一种可以用于客户端EJS模板的方法。其他方法依赖于检查res
对象,该对象在客户端模板中不存在。这正是我所需要的,但是wtf,你为什么要这样做?!:)如果不检查源代码,我不确定,但我怀疑模板引擎不会为未定义的值定义变量。在以后的ejs版本中,局部变量似乎已移动到res对象。可以确认这是否有效吗
<% if (res.locals.urvariable) { %>
<h1><%= urvariable.value1 %></h1>
<% } else { %>
<h1><%= urvariable.value2 %></h1>
<% } %>