How would you check for undefined property in ejs for node.js?-Collection of common programming errors

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 tpl = 'foo definedfoo undefined';
console.log(ejs.render(tpl, { locals: { bar: "baz" } }));

I’d expect this to render “foo undefined”. It does throw an foo undefined error instead.

I know that this is not supposed to be an issue, since this is expected behavior in the tests. Is there an easy way to avoid this?

The only solution I found is using the hasOwnProperty method.

var tpl = 'foo definedfoo undefined';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));

This doesn’t throw any errors.

Is there a better way to keep the template clean? Or why does it throw this error?

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

    var tpl = 'foo definedfoo undefined';
    console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
    
  2. 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 = 'foo definedfoo undefined';
    

Originally posted 2013-11-09 22:22:37.