0-9
JSでラベルがサポートされ続けなければならない理由

あまり知られてないし、実際殆ど使われてないけど、JSにはこんな感じで使うラベル構文がある。

hoge:

for (;;) {

while (1) { break hoge; };

};

使われてない理由は色いろあると思うけど、functionの中から外に飛べないのでイテレータとの相性がわるいというのもあって、これがなんとかなれば多少は使われるのかなーという感じ。

ただ、それでもこの言語仕様はJSの実装上非常に重要な構文で、これがないとsyntax errorになるコードは結構多いはず。

具体的には以下のようなコードがsyntax errorにならないのはhttp:がラベルと解釈されてその後の//がコメントの開始と解釈されてるから。

http://example.com/

if (true) { alert(1); };

また、hoge.jsにこんなコードが書かれてるのも見たことがある。

javascript:(alert(1));

おそらくブックマークレットをそのままファイルに記述したんだと思うけど、これもjavascript:がラベルで、それ以降がそのラベルに対するコードに解釈されてる。

あとはこんなコードも結構あるんじゃないかなー

<a href=”#” onclick=”javascript:(alert(1))”>click</a>

これも本来はhrefに書くべきものをonclickに書いた例だけど、ラベルがサポートされてるから動いてる例。

正直個人的にはエラーになったほうがいいんじゃないかと思うけど、互換性的にはサポートしない訳にはいかないと思う。

“use strict”;で「ラベル無効」みたいな指定ができるのがいいのかもなー

  1. take-cheezesyoichiからリブログしました
  2. hrowlslmnからリブログしました
  3. slmnsyoichiからリブログしました
  4. hidkicksyoichiからリブログしました
  5. dotnukesyoichiからリブログしました
  6. e-tagsyoichiからリブログしました
  7. mizki9577syoichiからリブログしました
  8. seapomeraniansyoichiからリブログしました
  9. kazzxzsyoichiからリブログしました
  10. layer13syoichiからリブログしました
  11. ken0205syoichiからリブログしました
  12. ilferabeausyoichiからリブログしました
  13. syoichi0-9からリブログしました
  14. atm09td0-9からリブログして、コメントを追加しました:
    具体的には以下のようなコードがsyntax…
  15. 0-9の投稿です