サーチ…


自動セミコロン挿入ルール

セミコロン挿入の基本的なルールは3つあります。

  1. プログラムが左から右に解析されるときに、文法の生成によって許可されていないトークン( 嫌なトークンと呼ばれる)が発生した場合、以下のうちの1つ以上が該当する場合には、問題のトークンの前にセミコロンが自動的に挿入されます条件は真です:
  • 問題のトークンは、少なくとも1つのLineTerminatorによって前のトークンから分離されています。
  • 問題のトークンは}です。
  1. プログラムが左から右に解析されるときに、トークンの入力ストリームの終わりに遭遇し、パーサーが入力トークンストリームを単一の完全なECMAScript Programとして解析できない場合、セミコロンは自動的に最後に挿入されます入力ストリーム。
  2. プログラムが左から右に解析されるときに、文法の一部の生成によって許容されるトークンが遭遇するが、その生成は制限された生産であり、トークンは注釈の直後の端末または非終端記号の最初のトークン制限されたプロダクション内の " [ここではLineTerminatorありません] "(したがってそのようなトークンは制限付きトークンと呼ばれます)、制限付きトークンは少なくとも1つのLineTerminatorによって前のトークンから分離され、 。

セミコロンが空の文として解析される場合、またはセミコロンがfor文のヘッダの2つのセミコロンのいずれかになる場合、セミコロンは自動的には挿入されません12.6.3)。

出典: ECMA-262、第5版ECMAScript仕様書:

自動セミコロン挿入の影響を受けるステートメント

  • 空文
  • varステートメント
  • 表現式
  • do-whileステートメント
  • continue声明
  • breakステートメント
  • return
  • throw

例:

トークンの入力ストリームの終わりに遭遇し、パーサーが入力トークンストリームを単一の完全なプログラムとして解析できない場合、入力ストリームの最後にセミコロンが自動的に挿入されます。

a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;

配列インデックス/リテラル

console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();

return文:

return 
  "something";
// is transformed to
return;
  "something";

return文にセミコロンの挿入を避ける

JavaScriptコーディング規約では、ブロックの開始括弧を宣言の同じ行に配置します。

if (...) {

}

function (a, b, ...) {

}

次の行の代わりに:

if (...)
{

}

function (a, b, ...) 
{

}

これは、オブジェクトを返すreturn文でのセミコロンの挿入を避けるために採用されています。

function foo() 
{
    return // A semicolon will be inserted here, making the function return nothing
    {
        foo: 'foo'
    };
}

foo(); // undefined

function properFoo() {
    return {
        foo: 'foo'
    };
}

properFoo(); // { foo: 'foo' }

ほとんどの言語では、開始ブラケットの配置は、コードの実行に実質的な影響を与えないため、個人的な好みの問題に過ぎません。 JavaScriptでは、見たように、最初の括弧を次の行に置くと、サイレントエラーが発生する可能性があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow