2009-03-24 5 views
-1

JavaScriptでこれを行うにはいくつかの方法があります。三項演算子とA、B、C以外の場合C.重要な違いはありますか?

最も重要かつ最も読みやすいと柔軟はおそらくです:*割り当てると連携し、読みにくくているだけで、他の

if (a){ 
    //b 
} 
else { 
    //c 
} 

何かがされています

var foo = 'c'; 
if (a){ 
    foo = 'b'; 
} 

私の主な質問は、しかし、についてです私が考えることができる最後の2つの方法:

var foo = a ? b : c; 

var foo = a && b || c; 

これら2つの表現は?両方に欠けている可読性以外のもの。

* でも fooを関数に割り当ててからif文の後に実行してください。

+0

3つの三項演算子(3つの要素で動作する演算子)である条件付き演算子について、技術的に議論しています。 –

+0

短いステートメントの場合、条件演算子は、本格的なif構文よりも「可」である可能性があります。 – Svante

答えて

8

とします

var a = false, b = '', c = 'bar'; 

そして:

var foo = a ? b : c; // foo == '' 
var foo = a && b || c; // foo == 'bar' 

二つは等価ではありません。条件演算子の代わりにブール演算子を使用しないでください。他の回答者と同様に、条件付き演算子は簡単な式の読みやすさに欠けていないという意見もあります。

+0

私は、Saschaが指摘しようとしていたものだと思っていますが、あなたはもっとはっきりしました。ありがとう:) – Annan

1
var foo = a ? b : c; // foo is b when a is true else c. 
var foo = a && b || c; // foo is true if a and b are true or c is true. 

後者がブール式であるのと同じ結果に評価されず、三項演算子を使用しないと評価されません。

+0

firefoxで次のコードを実行すると、2と表示されます。 "alert(1 && 2 || 3)" – Annan

+0

a == true b == false c == false - > falseとtrue &&偽=偽 ==真B ==真 C == FALSE - > =(真、真)またはFALSE TRUE ==偽B ==真 C = TRUE - >(偽と真(= false))またはtrue = true – Sascha

5

三元演算子は確かに私に読めるものです。最初の例よりもむしろ、簡潔で論理的なコードは常に同じことをする多くの行の制御コードよりも理解しやすいです。

3

私は最初のものが正しく使用されている限り、読みやすさに欠けています.IOW a、b、cは簡単な式です。このオペレータは、状況に応じて虐待を受けます。

同様に、結果fooをブール値以外のものとして使用する2番目の式はうまくいかないでしょう。ブール演算子を使用すると、ブール値以外の値を返すことができます。しかしブール式としては合理的です。

関連する問題