Поиск…
Правила автоматической вставки точки с запятой
Существует три основных правила ввода точки с запятой:
- Когда, когда программа анализируется слева направо, появляется токен (называемый оскорбительным токеном ), который не разрешен никаким производством грамматики, затем точка с запятой автоматически вставлена перед оскорбительным токеном, если одно или несколько из следующих условия верны:
- Оскорбительный токен отделен от предыдущего токена, по крайней мере, одним
LineTerminator
.- Оскорбительный токен
}
.
- Когда, когда программа анализируется слева направо, встречается конец входного потока токенов, и синтаксический анализатор не может проанализировать поток входных токенов как одну полную
Program
ECMAScript, затем точка с запятой автоматически вставлена в конце входной поток.- Когда, когда программа анализируется слева направо, встречается токен, который допускается некоторым произведением грамматики, но производство является ограниченным производством, а токен будет первым токеном для терминала или нетерминала сразу после аннотации « [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, как вы видели, размещение исходной скобки в следующей строке может привести к бесшумным ошибкам.