2012-04-17 11 views
3

if((typeof OA != 'undefined') && OA)if(OA)の違いは何ですか?の違い:if((type of OA!= 'undefined')&& OA)とif(OA)

元の文の作品。後者は現在の機能の実行を静かに止める。

(新人質問かもしれません)

ありがとうございます! OAが定義されていなかった場合

+2

コンテキストを追加できますか?両方のステートメントは本質的に同じですが、 'OA'が宣言されていない場合(つまり' var OA; ')には2番目のステートメントは失敗します。第2の状況になるべきではなく、常に変数を宣言します(関数パラメータの名前でない場合)。 –

+1

@FelixKling:私はそれがここの問題だと思います。 –

+1

@Rocket:おそらく...それだけで奇妙に思える...推測私はしばらくの間、このようなコードを見ていない。)と使用JSHintは本当にOAが存在していない可能性があり@FelixKling ...あまりにも –

答えて

4

if(OA)は失敗します。 typeof OA != 'undefined'は、OAが定義されているかどうかをチェックします。

var OA; 
if(OA){ 
} 

これは機能します。

if(OA){ 
} 

これは機能しません:OA is not defined。それは、変数

+1

+1、 'u​​ndefined'がfalse-yで、最初の例が' null'をチェックしていないことに気がつくのは、 'undefined'との比較です。人々はそれを混乱させるようです。定義されていない型は 'undefined'型と同じではありません。 – Marc

0

コンパイラにアクセスしようとする前に定義されていた場合に文句を言わない、それはこれが最初になります(OA)

0
if ((typeof OA != 'undefined') && OA) 

場合で評価しようとするのようにtypeof演算の包みOAを評価しよう

typeof OA != 'undefined' && OAチェック変数OAが定義されているかどうかを確認してください。そうであれば、ブール値にキャストされ、評価されます。

if(OA) 

これが存在するとすぐにboolean型にキャストし、それを評価OAを想定しています。変数OAが宣言されていない場合

第二の例では、JavaScript例外がスローされます - 最初の例ではそれを避けることができます。

はJavaScriptでundefinedの複数の意味の詳細説明についてはmy answer hereを参照してください。

+0

try {} catch(){}をダブルチェックして調べてみましょう。ReferenceError:OAが定義されていません。 したがって、実行時例外を引き起こす可能性のある「未定義」は、「未定義」ではなく、ブール演算では偽とみなされます。明らかに私は新人ですが、なぜ微妙な違いがありますか? – user1279175

+0

http://stackoverflow.com/questions/10098816/is-variable-set-defined-issue/10099267#10099267 – jbabey