JavaScriptのコメントは//と/* */の2種類である、というのはよく知られた話です。
嘘です。
4種類あります。
//
1行コメントです。
let a = 1; // ここから行末までコメント
誰もが使ったことやるやつですね。
//から行末までがコメントになります。
おそらく、最もよく使われているコメントだと思います。
/* */
複数行コメントです。
/*
コメント
終了まで全てコメント
*/
こちらもよく使いますね。
/*
/*
コメントのネストはできない
*/ ←ここがコメントの終わりなのでシンタックスエラーになる
*/
<!-- -->
実は<!-- -->という形のコメントも許可されています。
これはES2015で追加されたHTML-like Commentsというものです。
見てわかるとおりHTMLのコメント形式です。
let a = <!-- ここはコメント
1
--> ここもコメント
a=1になります。
開始タグは行の途中にも書けますが、終了タグは先頭(スペースは可)にしか置けません。
開始タグの後ろにある文字列と、あと終了タグの後ろの文字列も何故かコメント扱いになります。
その間にある行はコメントではなく、有効なJavaScriptとして解釈されます。
どうしてこんな仕様が存在するのかというと、歴史的理由というやつです。
いにしえのJavaScriptは、JavaScript非対応ブラウザでコードが画面に表示されてしまわないように、このように書かれていました。
<script language="javascript">
<!--
var a = 1;
-->
</script>
これが動くようにするために必要な仕様として、この形式のコメントは昔から実装されていました。
つまり、ES2015で初めて追加されたコメント形式というわけではなく、昔からの実装に仕様を合わせたということですね。
従って、この形式のコメントは規定されてこそいるものの、使用しないことが推奨されています。
実は<!--と-->はセットで使う必要はなく、それぞれ単独でも使うことができます。
これも有効なJavaScript
a=1;
--> ここはコメント
<!-- ここもコメント
どんな意味があるのかはわかりません。
#!
Nodeのスクリプトは、先頭に#! /usr/bin/env nodeみたいなのが入っていることがあります。
これはNodeでは有効な形式なのですが、普通のJavaScriptでは動きません。
なので同じスクリプトを使い回したいときとかに困るわけです。
そんなわけで、ファイルの先頭にある#!のみコメント行として扱う、というプロポーザルが提出されています。
既にSafari以外のブラウザで使用可能で、ファイルの使い回しが楽になります。
コメント扱いされるのは先頭行の先頭のみで、それ以外の行や、コードの途中などに#!と書いてもコメント扱いされることはありません。
Linuxなどではshebangと呼ばれていますが、JSでは#はsheじゃなくてhashって呼ぶからshebangじゃなくてhashbangだよ、だそうです。
まとめ
5種類目があったらどうしよう。
↧