2012-05-04 7 views
1

エクスプレスフレームワークを使用してnodejsを、データベースをcouchdb、テンプレートをEJSでシンプルなWebサイトを作成しています。私のフィールドのいくつかが、私のJSONドキュメントのいくつかでnullまたは未定義の時があります。私はそれを処理する必要があります。Express、EJS、未定義のテストでの挑戦

<% if (typeof test !== 'undefined') { %> 
    <p><%= test %></p> 
<% } %> 

コードのそのビットは未定義がうまくている「試験」フィールドを処理するようだが、以下のコードは、javascriptをしない理由

<% if (test) { %> 
    <p><%= test %></p> 
<% } %> 

「をテストが定義されていません」というエラーがスローされますテストが未定義であることを理解し、if節にfalseを入れるだけですか? 「未定義」のコンセプトはJavaScript言語で定義されている変数の状態よりも異なるので

irb 
    >> foo 
    NameError: undefined local variable or method `foo' for main:Object 
     from (irb):1 
+0

...その未定義虚偽ではないので:?私は個人的に幸せではない "ああ、こんにちは、あなたはこれが偽であることを意味する必要がありますか?" – Loktar

答えて

10

+0

このような詳細なお返事ありがとうございます、私の問題は実際にはJavaScriptではありませんでした。 jsはうまくいきました。エラーは急行の中から来ていました。変数は存在しませんでした。変数はテンプレート内で正常だったので、expressのrender関数はそのエラーをダンプしていました。ありがとう! – Costa

+0

'if(global.test)'のテストであなたの答えのコードが私にとってうまくいかない場合、最後の部分を使用してください。常に例外をスローします。私は 'if(typeof(global.text)!== 'undefined')'でチェックしなければなりませんでした。 – Patryk

4

ほとんどの言語は、このようなものです。この理由は理解できますが、その影響は混乱する可能性があります。特に、変数名とオブジェクトのプロパティについては混乱します。

未定義の変数にアクセスしようとすると例外がスローされることが実証されました。 「未定義」タイプで(変数が定義されていない)、この状態を混同しないでください:

if (bogusVariable) { // throws ReferenceError: bogusVariable is not defined. 
typeof(bogusVariable); // => undefined - wow, that's confusing. 

しかし、定義されていないオブジェクトのプロパティを安全にテストすることができます。

var x = {}; // an object 
x.foo; // => undefined - since "x" has no property "foo". 
typeof(x.foo); // => undefined 
if (!x.foo) { /* true */ } 

あなたは可能性がありすべての変数が実際には "グローバル"オブジェクト(Webブラウザの "global"または "window")のプロパティであることに注意して、このプロパティを利用してください。

bogus; // => ReferenceError: bogus is not defined. 
global.bogus; // => undefined (on node/rhino) 
window.bogus; // => undefined (on web browsers) 

ですから、のようなあなたのEJSのコードを書くことができるかもしれません:JavaScript言語の多くの部分がそうであるように

<% if (global.test) { %> 
    <p><%= test %></p> 
<% } %> 

はい、それは、混乱を招くのです。

+0

ありがとう、私の問題は実際にはJavaScriptではなかった。 jsはうまくいきました。エラーは急行の中から来ていました。変数は存在しませんでした。変数はテンプレート内で正常だったので、expressのrender関数はそのエラーをダンプしていました。ありがとう! – Costa

1

テストが定義されているかどうかを確認するために、あなたはそれを実行する必要があります。

<% if (this.test) { %> 
    here, test is defined 
<% } %> 
関連する問題