JavaScript/セミコロンの自動挿入
セミコロンの自動挿入(Automatic Semicolon Insertion; ASI)
編集C言語系言語では、セミコロン(;)は文の終わりを表します。他のC言語系言語とは異なり、JavaScriptでは文の最後にセミコロンを使用することを強制していません。その代わり、セミコロンは任意でありJavaScriptのインタープリタがコードを実行する際に「インテリジェントに」追加します。
JavaScriptでは、次のような場合にセミコロンが自動的に挿入されます[1]。
ASIはコードを書きやすくしますが(セミコロンをすべて入力する必要はありません)、実際には、セミコロンがないとプログラムのデバッグが難しくなります。このため、ステートメントの最後にセミコロンを使用することはベスト・プラクティスとして広く認識されています。しかし、ASIの存在は何を探すべきかを知らなければトラブルシューティングが困難ないくつかのバグを作り出す可能性があります。
例
編集入力されたコード | 実際の解釈 | 修正されたコード |
---|---|---|
return
2*a + 1;
|
return;
2*a + 1;
|
return 2*a + 1;
|
function getObject() {
return
{
// いくつかの行
};
}
|
function getObject() {
return;
{
// いくつかの行
};
}
|
function getObject() {
return {
// いくつかの行
};
}
|
i
++;
|
i;
++;
|
i++;
|
if (i === 5)
// ここにはセミコロンを期待しています
else
foo = 0;
|
if (i === 5)
// ここにセミコロンはありません!
else
foo = 0;
|
if (i === 5){
// コード
}
else {
foo = 0;
}
|
最初のケースでは、プログラマは 2*a + 1 を返すことを意図していましたがコードは何も返しませんでした。同様に、2番目のケースではプログラマは中括弧{}で囲まれた行を返すことを意図していましたが、コードは何も返しませんでした。このように、JavaScriptには奇妙な点があるため文の中で改行したり開始波括弧を別の行にしたりしないことがベスト・プラクティスとされています。
脚注
編集- ^ Colin J. Ihrig (2012-03-09). "The Dangers of JavaScript's Automatic Semicolon Insertion" (in English) (HTML). cjihrig.com. 2017-03-29にオリジナルからアーカイブされています(2021-07-12閲覧)。