Вы рекомендуете использовать точку с запятой после каждого оператора в JavaScript?


во многих ситуациях синтаксические анализаторы JavaScript вставляют точки с запятой для вас, если вы их оставите. Мой вопрос в том, оставляете ли вы их?

Если вы не знакомы с правилами, есть описание вставки точки с запятой на сайт Mozilla. Вот ключевой момент:

Если первый через nе маркеры формы программы JavaScript грамматически допустимы, но первый через n+1 st токены не и есть разрыв линии между nе токены и n+1 st токены, затем синтаксический анализатор пытается разобрать программу снова после вставки виртуальной точки с запятой между Nе и n+1 st жетоны.

Это описание может быть неполным, потому что оно не объясняет пример @Dreas. У кого-нибудь есть ссылка на полные правила, или посмотреть, почему пример получает точку с запятой? (Я попробовал его в JScript.NET.)

этот вопрос stackoverflow связан, но только говорит о конкретном сценарии.

11 52

11 ответов:

Да, вы должны использовать точку с запятой после каждого оператора в JavaScript.

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

// define a function
var fn = function () {
    //...
} // semicolon missing at this line

// then execute some code inside a closure
(function () {
    //...
})();

это будет интерпретироваться как:

var fn = function () {
    //...
}(function () {
    //...
})();

мы в конечном итоге передавая вторую функцию в качестве аргумента первой функции, а затем пытается назвать результат первого вызова функции в качестве функции. Вторая функция завершится с ошибкой"... это не функция" ошибка во время выполнения.

Да, вы всегда должны использовать точку с запятой. Зачем? Потому что если вы в конечном итоге используете компрессор JavaScript, весь ваш код будет на одной строке, что нарушит ваш код.

попробуйте http://www.jslint.com/; это заденет ваши чувства, но покажет вам много способов написать лучший JavaScript (и один из способов-всегда использовать точки с запятой).

то, что все, кажется, пропускают, это то, что точки с запятой в JavaScript не являются утверждением разделители но заявление разделители. Это тонкая разница, но это важно для того, как парсер запрограммирован. Относитесь к ним так, как они есть, и вы обнаружите, что оставить их будет чувствовать себя гораздо более естественно.

я запрограммировал на других языках, где точка с запятой является утверждением разделитель а также необязательно, как парсер делает "вставка с запятой" в новых строках, где она не нарушает грамматику. Так что я не был знаком с ним, когда я нашел его в JavaScript.

Мне не нравится шум на языке (что является одной из причин, по которой я плохо разбираюсь в Perl), а полуколоны-это шум в JavaScript. Поэтому я их опускаю.

Я бы сказал согласованность важнее, чем сохранение нескольких байт. Я всегда включаю точки с запятой.

С другой стороны, я хотел бы указать, что есть много мест, где точка с запятой синтаксически не требуется, даже если компрессор уничтожает все доступные пробелы. например, в конце блока.

if (a) { b() }

JavaScript автоматически вставляет точки с запятой при интерпретации кода, поэтому если вы поместите значение оператора return ниже строки, оно не будет возвращено:

Код:

return
5

Интерпретация JavaScript:

return;
5;

таким образом, ничего не возвращается, из-за автоматической вставки точки с запятой JavaScript

Я думаю, что это похоже на то, что в прошлом подкасте обсуждается. "Будьте либеральны в том, что вы принимаете" означает, что дополнительная работа должна быть помещена в синтаксический анализатор Javascript, чтобы исправить случаи, когда точки с запятой были опущены. Теперь у нас есть лодка страниц, плавающих вокруг с плохим синтаксисом, который может сломаться в один прекрасный день в будущем, когда какой-то браузер решит быть немного более строгим к тому, что он принимает. Этот тип правил также должен применяться к HTML и CSS. Вы можете написать сломанный HTML и CSS, но не удивляйтесь, когда вы получаете странные и трудно отлаживать поведение, когда какой-то браузер не правильно интерпретировать ваш неправильный код.

статьи точки с запятой в JavaScript являются необязательными делает некоторые действительно хорошие моменты о том, чтобы не использовать полу двоеточия в Javascript. В нем рассматриваются все моменты, которые были подняты ответами на этот вопрос.

Это лучшее объяснение автоматической вставки точки с запятой что я нашел в любом месте. Это развеет всю вашу неуверенность и сомнения.

Я использую точку с запятой, так как это моя привычка. Теперь я понимаю, почему я не могу разделить строку на две строки... он ставит точку с запятой в конце каждой строки.

нет, используйте только точки с запятой, когда они требуются.