調べる動機
先日JavaScriptのコードをみていて、末尾コロンがない部分がほとんどだった。僕は今までつけたほうが間違いが少ないというなんとなくでやっていたので、今回調べてみることにした。
末尾のセミコロンが必要ない場合(末尾コロン自動挿入)
3つほどパターンが存在する。
・①改行を挟んで、構文的にエラーが出るものであれば、セミコロンをいれて文を区切ってくれる
・②コードを最後まで見て、一番最後でエラーになったとき、セミコロンを入れてくれる
・③特定文字の改行の場合、セミコロンを入れてくれる
①改行を挟んで、構文的にエラーが出るものであれば、文を区切ってくれる
const a = 1
alert(a)
const b = 1;
alert(b);
【const a = 1】と【alert(a)】の後ろにそれぞれセミコロンが自動挿入されているため、問題なく動作します。
②コードを最後まで見て、一番最後でエラーになったとき、セミコロンを入れてくれる
const a = 1
alert(a)
【const a = 1】には、①のルールが適用されますが、【alert(a)】には改行がないので、①のルールが適用されません。そこで②のルールが適用され問題なく動作します。
③特定文字の改行の場合、セミコロンを入れてくれる
- return
- ++ 、--
- break
- throw
- continue
- yield
- ArrowParameters
などの後の改行の際は、その後に続いてエラーが出なくても自動で改行が入る
return
3
これは、
return;
3;
return 3;となっても構文的にエラーは出ないが、特定文字のためreturn; 3;となり何も返してくれなくなる。つまり、書くときは
return 3;
とする必要がある。
挿入されない例外
for(
ここには自動挿入されない
)
if()
セミコロン入れても空行の場合は自動挿入されない
else
alert('a')
セミコロンをいれるかどうか
セミコロンを入れる派が世間的には90%のようです。
入れない派の主張としては、セミコロンを入れるのは冗長、JavaScriptが多様な書き方ができるためなどがあります。
しかし、現実的にチームで開発する際は、間違いが起きにくいほうを選んだほうがいいと思う。そのため末尾には改行を入れるほうがいいと思った。