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

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

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

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

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

qaru.site/info/7052/... связан, но говорит только о конкретном сценарии.

Ответ 1

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

if (a) { b() }

Ответ 6

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

Ваш код:

return
5

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

return;
5;

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

Ответ 7

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

Ответ 8

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

Ответ 10

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

Ответ 11

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