JavaScript Diary

Netscape4.x の switch 文 [ 2001/06/23 ]
switch 文は if 文を使うよりか速い処理が望める場合があり便利なものですが、NetscapeNavigator4.x の switch 文は他ブラウザに比べてちょっとした違いがあります。以下のようなことをしてしまうと見つけ難いエラーになるので注意して下さい。
var num = 2 ;

var e = new Object();

e.p1 = 1 ;
e.p2 = 2 ;
e.p3 = 3 ;

switch( num ){
    case e.p1 : alert( 1 ); break ;
    case e.p2 : alert( 2 ); break ;
    case e.p3 : alert( 3 ); break ;
}
IE などではこれは予想通り、2 が表示されますが、NN4.x はエラーにもならず実行もしてくれません。
これのどこに問題があるのかというと case ラベルの値です。どうやら NN4.x ではラベル部分に不変でない値(case i, case n+1 など)は指定できない ようです。
実行時に変化しない値でなくてはいけません。
恐らくコンパイラの問題だと思いますが、Java などの言語ではラベル部分は制約が強く整数しか指定できないというのがあります。
IE や NS6 ではどんな値でも指定できてしまいますが、出来るだけ固定値を使用した方が良いようです。