2012-05-11 22 views
0

ブラウザには何も表示されず、この言語でエラーをチェックする方法がわからないけれども、JavaScriptには実行するコンパイラがないためです。私のスイッチ構造dosent(JavaScriptコントロール構造)

私のHTML

<!doctype html> 
<html> 
    <head> 
    <title>Where am I?></title> 
    <script src="script4.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

マイscript4.js

var number = 20; 
switch(number) { 
    case number > 0: 
    alert(number + " is Positive"); 
    break; 
    case number === 0: 
    alert(number + " is zero"); 
    break; 
    case number < 0; 
    alert(number + " is negative"); 
    default: 
    alert(number + " is not a number"); 
} 
+0

最近の各ブラウザには「デベロッパーツール」(通常はF12)があります。ツールのコンソールビュー(IE F12の場合は[スクリプト]タブをクリック)にエラーがあるかどうかを確認してください。あなたの質問にエラーを投稿してください。 –

+2

side note - 'number <0 'の場合に' break; 'がありません。 – jbabey

答えて

1

私はRedFilterのソリューションが動作するだろうとは思いもしませんでした。 (お勧めします!)ほとんどのCベース言語では、特定の値に対してのみマッチすることができます。だから、一般的に、if/elseチェーンが使用されます。

switch文が通常使用される方法ではありません
if (number > 0) 
    alert(number + " is Positive"); 
else if (number === 0) 
    alert(number + " is zero"); 
else if (number < 0) 
    alert(number + " is negative"); 
else 
    alert(number + " is not a number"); 
3

caseへの引数は、数値、文字列またはブール値でなければなりません(この場合、ブール値に解決される式を使用できますが、ifを使用するのではなく、なぜそうする必要があるのか​​分かりません。 )読み、理解し、後者が容易:あなたがここに使用されなければならない

switch(number) { 
    case 1: 
     alert("number is 1"); 
     break; 
    ... 
    ... 

    default: 
     alert("Unknown number"); 
} 

if/elseです:

if(number > 0) { 
    alert("number is positive"); 

} else if(number === 0) { 
    alert("number is zero"); 

} else if(number < 0) { 
    alert("number is negative"); 

} else { 
    alert("not a number"); 
} 

あなたはブール式を使用するとどうなりswitchへの引数はブール値と比較されていることですtrueまたはfalseの値。したがって、基本的にnumberの数値をtrueまたはfalseと比較しています。これは決して一致しません。

+0

あなたがdownvoteに行くなら、少なくとも理由を説明する礼儀があります。 –

+0

ブール式比較の束にスイッチを使用しない理由はありません。私の経験では、これはJavaScriptのかなり一般的なパターンです。私は 'if/else if'文を使うことで本質的な改善があるとは確信していません。 – RedFilter

+0

これはどのようにダウンワードを保証するのですか?ダウンボートは*間違った答えです。私が書いたものは本質的に間違っています。私のアプローチはまったく異なります。私は 'if-else'がより読みやすいIMHOであることを発見しました。 –

5

あなただけのブールcase式、例えばを書くためにあなたを可能にするためにtrueのスイッチ値を使用できるようにJavaScriptは、スイッチの値と各ケースの発現を比較します:

switch(true) 
{ 
    case number > 0: 
     alert(number + " is Positive"); 
     break; 
    case number === 0: 
     alert(number + " is zero"); 
     break; 
    case number < 0: 
     alert(number + " is negative"); 
     break; 
    default: 
     alert(number + " is not a number"); 
} 

JSFiddle example here

。なお、これは私にとって共通のパターンですが(そしてC#のような他の言語でも存在したいと思う機能)、開発者によってはそれが慣習的ではないかもしれません。

+0

+1私が今までに見たことがないjavascriptでの 'switch 'の面白い使い方。 – Lekensteyn

+0

+1、私は、JSLintが何を言及しているかに関わらず、if-else-ifを入れ子にしているのではなく、このアプローチを好みます。 – jbabey

+1

これはうまくいくが、私はこれがif-elseより良いアプローチだとは思わない。 'if-else'は、特定のケースで作業しているコードを読んでいる人に明示的に示しています。このように 'switch 'を使うことは賢明ですが、明白ではありません。 –