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

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

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

If the first through the nth tokens of a JavaScript program form are grammatically valid but the first through the n+1st tokens are not and there is a line break between the nth tokens and the n+1st tokens, then the parser tries to parse the program again after inserting a virtual semicolon token between the nth and the n+1st tokens.

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
52
0
187 514
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

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

Если в языке есть определенные случаи, когда требуется точка с запятой, я бы применил ее ко всем случаям, если это возможно, просто ради кода, который легче читать, и кода, который просто хорошо выглядит. Итак ... +1.

Dalin Seivewright 14.01.2009 21:17

Для единообразия и удобочитаемости ставьте точку с запятой после каждого оператора. +1

JustinT 14.01.2009 21:30

Аргументированное обсуждение лучше, чем принятие чьей-либо стороны.

ShreevatsaR 14.01.2009 21:30

См. Причины Крокфорда здесь: javascript.crockford.com/code.html «JavaScript позволяет использовать любое выражение в качестве оператора. Это может замаскировать некоторые ошибки, особенно при наличии вставки точки с запятой».

Jordan Liggitt 14.01.2009 21:36

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

Andrzej Doyle 15.01.2009 01:22

отличная статья о точках с запятой в js: mislav.uniqpath.com/2010/05/semicolons

makevoid 17.03.2011 15:37

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

Это намного красивее. Так почему бы не? Конечно, это также подразумевает ВСЕГДА начинать ваше выражение с; когда он начинается с (. Итак, в этой строке: (function () {var iminvisible = 0}) () должен быть добавлен символ ";", иначе у вас будут проблемы.

odinho - Velmont 18.01.2012 21:46

Прочтите mislav.uniqpath.com/2010/05/semicolons :-) О, это уже было здесь в ответе.

odinho - Velmont 18.01.2012 21:46

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

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

Если ваш компрессор javascript может сломать ваш код javascript, я бы рекомендовал как можно скорее использовать другой.

Alsciende 07.06.2010 19:22

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

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

if (a) { b() }

В этом конкретном случае вы сохраняете несколько байтов. а также используйте точку с запятой с if (a) b;

Kev 14.01.2009 22:29

современные компрессоры будут вставлять точки с запятой mislav.uniqpath.com/2010/05/semicolons

Matt Briggs 05.08.2011 05:30

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

разница в том, что сломанный html по определению не соответствует спецификации. в спецификации javascript очень четко указано, что точки с запятой не являются обязательными. mislav.uniqpath.com/2010/05/semicolons

Matt Briggs 05.08.2011 05:28

По-прежнему пропуск точки с запятой может привести к неоднозначным утверждениям, которые с точки зрения компилятора не являются двусмысленными, но для кого-то, кто пытается прочитать и проанализировать код в своей голове, очень трудно проанализировать, не запоминая множество конкретных правил. Это намного сложнее, чем новая строка = подразумевается точка с запятой. news.ycombinator.com/item?id=374529

anon 05.08.2011 16:48

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

Ваш код:

return
5

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

return;
5;

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

Это правда, но не имеет отношения к вопросу. Явное использование точки с запятой в этом случае не поможет.

Joel Anair 06.03.2010 23:05

Это сделало бы проблему очевидной с первого взгляда на код (что более очевидно, настоящий программист javascript сочтет ее очевидной и без точек с запятой)

Jasper 07.06.2010 18:52

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

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

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

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

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

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

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

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

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

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

Вау, я всегда ставил точку с запятой в конце операторов, которые выглядят как var foo = "bar";, но я не знал, что они должны быть в конце функций, я думал, что закрывающая фигурная скобка заканчивает оператор? Так следует ли ставить точку с запятой после всех операторов блока, таких как if, while и т. д.?

JD Isaacks 17.02.2011 00:41

@John: Нет. Обратите внимание, что в моем примере используется назначение функции. Вам не нужно и не следует ставить точки с запятой в обычные функции или блоки кода.

anon 18.02.2011 08:24

На самом деле это пример один, в котором новая строка не может заменить точку с запятой. Я имею привычку начинать любую строку с (ставить перед ней точку с запятой (так ;(function() {)

Matt Briggs 05.08.2011 05:37

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

chocojosh 23.04.2012 00:31

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

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

Мораль истории в приведенной выше ссылке такова: «когда строка начинается со скобок, добавьте к ней точку с запятой».

Clint Pachl 09.11.2011 22:31

Другие вопросы по теме