JSでラベルがサポートされ続けなければならない理由
あまり知られてないし、実際殆ど使われてないけど、JSにはこんな感じで使うラベル構文がある。
hoge:
for (;;) {
while (1) { break hoge; };
};
使われてない理由は色いろあると思うけど、functionの中から外に飛べないのでイテレータとの相性がわるいというのもあって、これがなんとかなれば多少は使われるのかなーという感じ。
ただ、それでもこの言語仕様はJSの実装上非常に重要な構文で、これがないとsyntax errorになるコードは結構多いはず。
具体的には以下のようなコードがsyntax errorにならないのはhttp:がラベルと解釈されてその後の//がコメントの開始と解釈されてるから。
if (true) { alert(1); };
また、hoge.jsにこんなコードが書かれてるのも見たことがある。
javascript:(alert(1));
おそらくブックマークレットをそのままファイルに記述したんだと思うけど、これもjavascript:がラベルで、それ以降がそのラベルに対するコードに解釈されてる。
あとはこんなコードも結構あるんじゃないかなー
<a href=”#” onclick=”javascript:(alert(1))”>click</a>
これも本来はhrefに書くべきものをonclickに書いた例だけど、ラベルがサポートされてるから動いてる例。
正直個人的にはエラーになったほうがいいんじゃないかと思うけど、互換性的にはサポートしない訳にはいかないと思う。
“use strict”;で「ラベル無効」みたいな指定ができるのがいいのかもなー
-
cranbrookertがこの投稿を「スキ!」と言っています
-
affordable06がこの投稿を「スキ!」と言っています
-
giveaway69bopがこの投稿を「スキ!」と言っています
-
take-cheezeがsyoichiからリブログしました
-
hrowlがslmnからリブログしました
-
slmnがsyoichiからリブログしました
-
duf20がこの投稿を「スキ!」と言っています
-
hidkickがsyoichiからリブログしました
-
dotnukeがsyoichiからリブログしました
-
e-tagがsyoichiからリブログしました
-
mizki9577がsyoichiからリブログしました
-
seapomeranianがsyoichiからリブログしました
-
kazzxzがsyoichiからリブログしました
-
layer13がsyoichiからリブログしました
-
ken0205がsyoichiからリブログしました
-
ilferabeauがsyoichiからリブログしました
-
syoichiが0-9からリブログしました
-
atm09tdがこの投稿を「スキ!」と言っています
-
atm09tdが0-9からリブログして、コメントを追加しました:
具体的には以下のようなコードがsyntax…
-
0-9の投稿です