switch{〜}の中から外部ラベルへジャンプ

[上に] [前に] [次に]
J.Naka [E-Mail] 1999/10/02(土) 11:52:47
1: Again;
2: document.write($A + "\n");
3: switch $A{
4: case p1:
5:   あれこれ;
6:   break;
7: case p2:
8:   あれこれ;
9:   break;
10: default:
11:   $A = $DEF;
12:   break Again;
13: }

↑とした場合、12行でラベルが未定義とエラーになります。
12行をコメントアウトするとエラーならず正常に実行します。
JavaScriptの仕様でしょうか?

kala 1999/10/02(土) 15:52:28
>1: Again;

>1: Again:
このようにすれば良いのではないでしょうか。http://www.tohoho-web.com/js/statement.htm#labelを見た限りでは,「;」ではなく「:」です。

J.Naka 1999/10/02(土) 17:51:43
>1: Again;
はタイプミスです。
>1: Again:
こっちが書こうとしたコードです。
Again: でエラーが出るということです。

自分のブラウザー(IE4)のフォント設定は最小にしているので、打ち間違っても気が付かないことが多いので気を付けていたのですが、ミスってしまいました。
すいません。

J.Naka 1999/10/03(日) 01:05:09
ありゃ、スレッド最初のアーティクルに重大なタイプミスが(^^;
>12行をコメントアウトするとエラーならず正常に実行します。
↓訂正
2行をコメントアウトするとエラーならず正常に実行します。

#なんで誤字&脱字すんるんですかー?>J.Nakaさん

アトム 1999/10/04(月) 22:12:18
JavaScriptのことはあまり詳しくないのですが、(Javaとほぼ同じではないかと思い)
Labelの記述位置が違うと思います。

この場合、たぶん「switch」文にラベル付けをしたいはずなので、「switch」文の
直前にラベルの宣言文を持ってくるべきだと思います。

もし、「document.write(A + "\n<BR>");」も含めてラベル指定したければ、
複文を{}で囲んでブロック化してやる必要があります。

複文をブロック化してラベル付けした例
Again:{
 document.write(A + "\n<BR>");
 switch(A){
  hogehoge;
 }
}
=========================================
あと、switch文の条件式は()で囲んでやる必要があると思います。
(あと、JavaScriptでは変数名の頭に「$」ってつけてもOKでしたっけ?)

あと、蛇足ですが、ラベル付けは今回のケースでは無意味です。
(恐らく記述を簡単にするために省略しただけなのかも知れませんが、
もし、そうなら以下は読み飛ばしてください)
ラベルの使い方としては、
for文などで、多重にネストしたときに、ラベル付けすることによって
内側のループから一気に外側のループを抜け出したいときに使います。

swicth文でのbreakは「以下の記述を無視する」という意味合いのものですから、
switch文の最後の文(今回の場合、defalt文)にbreakを記述する必要はありません。(記述しても問題ありませんが)まして、switchを抜け出すためにラベル付けをして
「break Again」としても全く無意味です。

J.Naka 1999/10/05(火) 14:33:54
アトムさん、ども有り難う御座います!

自分は何か「すっげ」勘違いと混同があるみたい(^^;
アトムさんの御解答を元に、マニュアル熟読してみます。
#手元に、詳しい書籍ないから今、マイクロソフトの
 「JScript チュートリアル」をダウンロードしました。

J.Naka 1999/10/05(火) 15:29:52
[[解決]]
あっ解決しときます。
#過去に「解決」忘れと、御返事忘れがあります。ごめんね(^^)

[上に] [前に] [次に]