Интерпретаторы JavaScript выполняют так называемую «вставку точки с запятой», поэтому, если строка без точки с запятой является действительной, точка с запятой будет тихо добавлена в конец оператора, и ошибка не возникнет.
var foo = 'bar'
// Valid, foo now contains 'bar'
var bas =
{ prop: 'yay!' }
// Valid, bas now contains object with property 'prop' containing 'yay!'
var zeb =
switch (zeb) {
...
// Invalid, because the lines following 'var zeb =' aren't an assignable value
Не слишком сложно и, по крайней мере, выдается ошибка, когда что-то явно не так. Но бывают случаи, когда выдается ошибка , а не , но операторы не выполняются должным образом из-за вставки точки с запятой. Рассмотрим функцию, которая должна возвращать объект:
return {
prop: 'yay!'
}
// The object literal gets returned as expected and all is well
return
{
prop: 'nay!'
}
// Oops! return by itself is a perfectly valid statement, so a semicolon
// is inserted and undefined is unexpectedly returned, rather than the object
// literal. Note that no error occurred.
Подобные ошибки могут быть невероятно трудными для поиска, и, хотя вы не можете гарантировать , этого никогда не произойдет (поскольку я не знаю, как отключить вставку точек с запятой), такие ошибки легче определить, когда вы ясно даете понять свои намерения, последовательно используя точки с запятой. Это и явное добавление точек с запятой обычно считается хорошим стилем.
Впервые я узнал об этой коварной маленькой возможности, прочитав превосходную и лаконичную книгу Дугласа Крокфорда" JavaScript: The Good Parts ". Я очень рекомендую.