行末のセミコロン省略の違い

知らなかった!

JavaScript は, 安全にセミコロンの存在が推測できる場合を除いて, 文の最後にセミコロンを要求します. 上記の例では関数宣言やオブジェクトや配列リテラルが文の中にあります. 閉じ括弧は文の終わりを表現するものではありません. 次のトークンが()演算子などの場合, JavaScript はそれを前の文の続きとみなしてしまいます.

Google JavaScript Style Guide 和訳」より


RubyJavaScriptも、行末のセミコロンが省略できる。なんとなく同じようなものだろうと深く考えたことがなかったが、機能が全然違っていた。Rubyは、文(式)の終わりと解釈できればそうするが、JavaScriptは次の行と継続していると解釈できればそうする。デフォルトが真逆だったのだ。別の言い方をすると、Rubyは行末のセミコロンは常に省略できるが、JavaScriptの場合は省略できないことがかなりある。


まあ、いままで、JavaScriptで、セミコロンを省略して書いたことはないので、セーフ。そういうことなら、セミコロンが省略できるという機能は要らないと思うな。

2012-01-04追記

ただし、下記のものについては改行を挟まないで書かないといけない。つまり例えば、次の行が続きであると見なせる場合でも return<改行> は return;<改行> と見なされる。
・後置の ++ や --
・break や continue のラベル
・return の返値
・throw する値

参考: http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.9.1