Ejsテンプレートで未定義のプロパティをチェックする最良の方法は何ですか?
(私はTJ Holowaychukによって node.jsパッケージ を使用しています)
例:
var tpl = '<% if (foo) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz" } }));
私はこれが「foo undefined」になると思います。代わりにfoo undefinedエラーをスローします。
これは予想される動作 テスト内 であるため、これは問題ではないことを知っています。これを回避する簡単な方法はありますか?
私が見つけた唯一の解決策は、hasOwnProperty
メソッドを使用することです。
var tpl = '<% if (hasOwnProperty("foo")) { %>foo defined<% } else { %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
これはエラーをスローしません。
テンプレートをきれいに保つより良い方法はありますか?または、なぜこのエラーをスローするのですか?
プロパティをテストする別の方法は、locals
オブジェクトを介して間接的にプロパティを参照することです。あなたの例を使用して:
var tpl = '<% if(locals.foo){ %>foo defined<% }else{ %>foo undefined<% } %>';
console.log(ejs.render(tpl, { locals: { bar: "baz"} }));
if (typeof foo == 'undefined')
のように、typeof
を使用します。文字列 "undefined"でtypeof
演算子を使用していますが、undefined
グローバル変数と直接比較する人もいます。テロリストのJSライブラリ開発者がグローバル変数の値を変更してコードが壊れたままになるのを防ぐため、私はこの方法を好みます。
これは、カーリーが存在しないため「クリーン」であると考える3項としても表現できます。
var tpl = '<% (typeof foo != "undefined" ? %>foo defined<% : %>foo undefined<% ) %>';
私の考えでは最も単純でクリーンです:
<%= (!!locals.foo)?foo:'' %>