Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ejs for node.js中检查未定义的属性?_Javascript_Node.js_Undefined_Ejs - Fatal编程技术网

Javascript 如何在ejs for node.js中检查未定义的属性?

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,

检查ejs模板中未定义属性的最佳方法是什么

(我用的是TJ Holowaychuk的)

例如:

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> 
<% } %>