是这样的,在使用ejs模板的时候 很多时候都需要对变量的有效性,包括数组的长度等等进行验证 那么问题来了 有的变量我没随着render传进去的话 怎么才能检查出来? 试过if(var) typeof(var) !== 'undefined’ 都会报错
Cannot read property 'name' of undefined
各位有什么好的办法吗? 现在是必须得传个空的过去,但是这个空的我用不上的,每次在render里面都得传大量的参数~
嵌套的属性要逐级检查
if (typeof(foo) !== 'undefined' && typeof(foo.bar) !== 'undefined') {
// use foo.bar
}
@SinalVee 原来是这样额~ 我还以为是别的问题呢 谢谢回答,以后就这么用了 typeof(var)
<% if ( obj && obj.name ) { %>
.......
<% } %>
也可以用underscore这样的库 http://underscorejs.org/#isUndefined 反正通常这种库其它地方都会用到。
也可以在模版最高的位置声明而不初始化
var undef;
然后
if (myvar === undef) { ... }
@MaelWeb 这两种估计都可以 只是我不晓得嵌套必须得一层一层查看,感觉这是个梗啊!
@flamingtop 谢谢回答 暂时没用到,而且也不晓得干嘛的 坑不能挖太多了
@MaelWeb 这样如果render的时候没有给定obj,会报obj is not defined
错误的
@MaelWeb 刚试了下,这个是肯定不行的,会报错is not defined
@SinalVee 还有就是外层验证了的话,在里层可以不用嵌套验证,例如下面只需要验证(session.user.signature)就可以了
<% if ((typeof(session) !== 'undefined') && (typeof(session.user) !== 'undefined') && (typeof(session.user.name) !== 'undefined')) { %>
<% if(typeof(session.user.signature) !== 'undefined') { %>
<%= session.user.signature %>
<% } %>
<% } %>