switchは条件に従って実行するステートメントを決定します。
条件に応じて、特定のステートメントを実行したいときにswitchを使います。
たとえば、変数nの値が0のときにあるコードを実行し、nが1のときには別のコードを実行し、
nが2のときにはさらに別のコードを実行したい、というような場合に、条件を決定する値に応じて実行するステートメントを切り替えるときにswitchを使います。
switchステートメントの書式は次のとおりです。
switch (expr) {
case label1:
statements1
[break;]
case label2:
statements2
[break;]
...
case labeln:
statementsn
[break;]
default:
statements_def
[break;]
}
exprには各ラベル(labeln)と一致するか調べる式を指定します。一般的には整数や文字列を含む変数を指定します。
labelnはexprと一致するかどうか調べるのに使う識別子で、exprがlabelnと一致したらstatementsnが実行されます。
statements_defは、exprがいずれのラベルにも一致しなかった場合に実行されるステートメント(デフォルトのステートメント)です。
次の例は、switchステートメントを使って変数nの値に応じて「Zero」「One」「Other」のいずれかを出力する例です。
<script type="text/javascript">
var n = prompt("数値を入力してください", 0);
switch (n) {
case "0":
document.write("Zero");
break;
case "1":
document.write("One");
break;
default:
document.write("Other");
break;
}
</script>
この場合、条件式exprは「n」であり、statement1が「document.write("Zero");」、「document.write("One");」です。
nが"0"の場合は、「case "0":」のあとで次の「break」の直前の行までのコードが実行されます。
この場合は「document.write("Zero")」が実行されるので、nが0の場合は「Zero」と出力されます。
同様に、nが1の場合は、「case 1」のあとの「break」までのコードが実行されて「One」と出力されます。
nが0でもなく1でもない場合は、「document.write("Other")」が実行されて「Other」が出力されます。
つまり、「default」はほかのcaseに一致する値がないときに実行するデフォルトのコードを記述するというわけです。
なお、「default」のあとのbreakは省略してもしなくてもプログラムの動作に影響はありませんが、 あとでcase文を追加したようなときにbreakを忘れないためにも、省略しないほうがよいでしょう。
caseステートメントのあとでbreakを使わないと、caseで一致する値を複数で指定することもできます。
次の例は、nが"0"のときにbreakを使わずに次の「case "1"」のあとのコードを実行するようにして、 結果としてnが"0"のときとnが"1"のときに「Zero or One」を出力するようにしたスクリプトの例です。
var n = prompt("数値を入力してください", 0);
switch (n){
case "0": // nが"0"のときと
case "1": // nが"1"のとき
document.write("Zero or One");
break;
default: // それ以外のとき
document.write("Other");
break;
}
case文で調べる値は文字列でもかまいません。次の例は「犬」または「猫」を入力するとその鳴き声を表示するスクリプトの例です。
<script type="text/javascript">
var s = prompt("「犬」または「猫」を入力してください");
switch (s) {
case "犬":
document.write("わんわん");
break;
case "猫":
document.write("にゃーご");
break;
default:
document.write("犬か猫にするべし");
break;
}
</script>