How would you check for undefined property in ejs for node.js?

后端 未结 4 1764
清歌不尽
清歌不尽 2020-12-13 23:53

What is the best way to check for an undefined property in an ejs template?

(I\'m using the node.js package by TJ Holowaychuk)

Example:

var t         


        
相关标签:
4条回答
  • 2020-12-14 00:25

    I would use typeof, as in if (typeof foo == 'undefined'). I use the typeof operator with the string "undefined", whereas some people might do a direct comparison with the undefined global variable. I prefer this method because it is protected against some terrorist JS library developer changing the value of the global variable, leaving your code broken.

    This could also be expressed as a ternary, which some view as "cleaner" due to the absence of curlies:

    var tpl = '<% (typeof foo != "undefined" ? %>foo defined<% : %>foo undefined<% ) %>';
    
    0 讨论(0)
  • 2020-12-14 00:32

    Another way to test for a property is to reference it indirectly via the locals object. Using your example:

    var tpl = '<% if(locals.foo){ %>foo defined<% }else{ %>foo undefined<% } %>';
    console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
    
    0 讨论(0)
  • 2020-12-14 00:43

    Earlier version of EJS supports only locals But Now in the latest versions of EJS support res.locals

    Sample with ternary operator -

    <%= (res.locals.foo)?"foo":"" %>
    

    Sample with if-else -

    <% if (res.locals.urvariable) { %>
       <h1><%= urvariable.value1 %></h1> 
    <% } else { %> 
       <h1><%= urvariable.value2 %></h1> 
    <% } %>
    
    0 讨论(0)
  • 2020-12-14 00:44

    Simplest, and cleanest in my opinion:

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

    0 讨论(0)
提交回复
热议问题