2012-03-04 7 views
0

if文をjavascriptを使ってswitch文に変換しようとしています。これはif文の動作です。Javascript - if文をswitch文に変更する

 if(!error1(num, a_id) && !error2(num, b_id) && !error3(num, c_id) && !error4(num, d_id)) { 
    a.innerHTML = num; 

これをswitch文に入れる方法についてのヒントは素晴らしいと思います。ありがとう

+3

これは通常、 'switch'への変換の候補である' if/else if/else'チェーンです。これは単一(コンパウンドであるにもかかわらず) 'if'条件です。スイッチに変換する必要はありません。 –

+1

'error1'、' error2'などのコードを見ずには不可能 –

+1

なぜあなたはそれをしたいですか? 'if(x == a || x == b || x == c)'ならば、 'switch(x){case a:... case b:... case c: ... default:...} 'となりますが、ここには' || 'ではなく' && 'があります。 – Manish

答えて

1

あなたはです。これをswitchにしますが、なぜあなたが望むのかは不明です。一見すると、これはあなたがswitchを使用するような状況(一連の値の中から選択し、それぞれに異なる何かをすること)ではありません。これはJavaScriptではなく、switchを持っている他のほとんどの言語で動作します

switch (false) { 
    case !error1(num, a_id): 
    case !error2(num, b_id): 
    case !error3(num, c_id): 
    case !error4(num, d_id): 
     // Do nothing 
     break; 
    default: 
     a.innerHTML = num; 
     break; 
} 

:ここ

はどのように、私はそれをお勧めしませんがあります。その理由は、caseラベルが実行ポイントに達すると評価され、ラベルがguaranteed to be evaluated in source code orderであるためです。したがって、値falseに切り替えています。これは、最初に!error1(num, a_id)の戻り値に対して(完全一致を使用して、===を使用して)テストされ、一致しない場合は、!error2(num, a_id)などと比較されます。一致するものがなければ、すべてがtrueと評価され、ブロックdefaultのコードが実行されます。

+4

私は決して_clarify_ではなく、スイッチの_obfuscate_と 'if'を見ることは考えられませんでした。 –

+0

@マイケル:うん。 :-) –

+0

これは元のコードと同じことをしません。これはエラー関数のうちのどれかが 'false'を返すならば成功しますが、エラー関数の_all_が' false'を返すなら、元のコードは成功します。 1つの修正は、 'case'条件を' error1(num、a_id) 'などに変更し、成功したコードを' default'ブロックに移動することです(この[jsFiddle](http://jsfiddle.net/ FumKn/1 /))。 –