Поиск…


Правила автоматической вставки точки с запятой

Существует три основных правила ввода точки с запятой:

  1. Когда, когда программа анализируется слева направо, появляется токен (называемый оскорбительным токеном ), который не разрешен никаким производством грамматики, затем точка с запятой автоматически вставлена ​​перед оскорбительным токеном, если одно или несколько из следующих условия верны:
  • Оскорбительный токен отделен от предыдущего токена, по крайней мере, одним LineTerminator .
  • Оскорбительный токен } .
  1. Когда, когда программа анализируется слева направо, встречается конец входного потока токенов, и синтаксический анализатор не может проанализировать поток входных токенов как одну полную Program ECMAScript, затем точка с запятой автоматически вставлена ​​в конце входной поток.
  2. Когда, когда программа анализируется слева направо, встречается токен, который допускается некоторым произведением грамматики, но производство является ограниченным производством, а токен будет первым токеном для терминала или нетерминала сразу после аннотации « [no LineTerminator здесь] » в пределах ограниченного производства (и, следовательно, такой токен называется ограниченным токеном), а ограниченный токен отделен от предыдущего токена хотя бы одним LineTerminator , тогда точка с запятой автоматически вставлена ​​перед ограниченным токеном ,

Тем не менее, существует дополнительное переопределяющее условие для предыдущих правил: точка с запятой никогда не вставлена ​​автоматически, если точка с запятой затем анализируется как пустой оператор или если эта точка с запятой станет одной из двух точек с запятой в заголовке оператора for (см. 12.6.3).

Источник: ECMA-262, пятое издание Спецификация ECMAScript:

Выражения, вызванные автоматической установкой точки с запятой

  • пустой оператор
  • инструкция var
  • выражение выражения
  • заявление do-while
  • continue заявление
  • оператор break
  • return statement
  • 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 
  "something";
// is transformed to
return;
  "something";

Избегайте вставки с запятой в операторах возврата

Соглашение о кодировании 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