ejs模板里面怎么检查变量的有效性?
发布于 8 年前 作者 hezhongfeng 4885 次浏览 来自 问答

是这样的,在使用ejs模板的时候 很多时候都需要对变量的有效性,包括数组的长度等等进行验证 那么问题来了 有的变量我没随着render传进去的话 怎么才能检查出来? 试过if(var) typeof(var) !== 'undefined’ 都会报错

Cannot read property 'name' of undefined

各位有什么好的办法吗? 现在是必须得传个空的过去,但是这个空的我用不上的,每次在render里面都得传大量的参数~

11 回复

嵌套的属性要逐级检查

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 那么最终结果就是

typeof(var) !== 'undefined' 

并且注意嵌套要一层一层检查了吧?

@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 %>
        <% } %>
<% } %>
回到顶部