Почему так много точек с запятой в JavaScript? - PullRequest
15 голосов
/ 13 июля 2011

Я часто использую точки с запятой в моем JavaScript:

var x = 1;
var y = 2;
if (x==y){do something};

Я недавно заметил, что я смотрел на JavaScript, у которого нет точек с запятой после операторов if.Затем мне пришло в голову, что я даже не знаю предпочтительного синтаксиса точек с запятой в JS, и после некоторого поиска в Google узнал (довольно удивительно), что вообще нет необходимости использовать точки с запятой, кроме операторов разбиения, которые находятся в одной строке.

Итак, вопрос ... откуда появилась эта привычка людей, использующих точки с запятой?Является ли это остатком какого-то популярного языка, который использовался в то время, когда в игру вступил JavaScript?Просто хорошая практика в целом?Это только у меня?

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

ОБНОВЛЕНИЕ:

Спасибо за все ответы, всем!Похоже, что для краткого изложения причина, по которой мы видим много точек с запятой в JS, даже если в них нет необходимости, исходит от различных переменных:

  • старые JS-минимизаторы производят неработающий код, если вы не вставляете точки с запятой
  • многие другие языки используют их, поэтому это привычка
  • иногда точка с запятой МОЖЕТ изменить логику
  • некоторые предпочитают использовать их, чтобы сделать код более человечным-читаемый

Ответы [ 10 ]

13 голосов
/ 13 июля 2011

Многие компьютерные языки используют точки с запятой для обозначения конца оператора.C, C ++ и Java являются популярными примерами этого.

Что касается того, почему люди используют их, несмотря на то, что они являются необязательными, они улучшают читабельность вашего кода.В большинстве случаев это просто делается по привычке, но иногда вам нужно использовать точки с запятой в вашем коде, чтобы устранить возможную двусмысленность.Это всегда лучше безопасно (и непротиворечиво), чем сожалеть.

Вот пример, взятый из Вы рекомендуете использовать точки с запятой после каждого оператора в 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.В противном случае все утверждения будут объединены в один большой беспорядок.

4 голосов
/ 13 июля 2011

Привычка исходит от страха.Боязнь «сломанных» js-компрессоров (у меня были некоторые проблемы с Plone-компрессорами с устаревшими js, у которых, например, не было оператора var), боязнь возможных неудачных реализаций браузера, список можно продолжить.Итак, почему бы просто не использовать ; везде и избегать всех этих ловушек?

Проблема этого подхода (просто всегда используйте точки с запятой без дополнительного объяснения) состоит в том, что вы не пытаетесь понять, почему вы делаетеэто, во-первых, вы просто делаете, потому что кто-то сказал вам это делать, и, ИМХО, это тоже может быть вредно.И сломанные компрессоры, которые вы имели в прошлом, теперь исправлены, и вы продолжаете вставлять точки с запятой ... ломать привычки сложно.Мы просто продолжаем делать что-то, потому что «мы всегда это делали».

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

Вот большой ресурс об этой теме и источник цитаты.Отличное чтение.

Итак, какой стиль лучше? В той степени, в которой существует объективно «лучший» выбор, мне кажется, что точка с запятой / запятаяпервый стиль немного лучше, потому что он в основном более сканируемый и потому что он поощряет программистов лучше понимать язык, который они используют.

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

4 голосов
/ 13 июля 2011

JavaScript требует точек с запятой. Но он имеет автоматическую вставку точек с запятой.

Большинство программистов на JavaScript умнее ASI и предпочитают быть явными со своими точками с запятой.

3 голосов
/ 13 июля 2011

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

return
    {'foo':'bar'};

из-за автоматической вставки точек с запятой в javascript ничего не вернет.

1 голос
/ 13 июля 2011

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

Во-первых, у вас есть один оператор, если:

if (someNumber == 2)
  doSomething();
else
  doSomethingElse();

Тогда у вас есть несколько операторовif (точка с запятой не требуется):

if (someNumber == 3) {
  doThisFirst();
  doThisSecond();
} else
  doSomethingElse();

Этот синтаксис также можно спутать с JavaScript object literal , для которого требуется полуцвет:

var SomeObjectLiteral = {
  property: 2,
  doSomething: function() {
  }
};

В основном, точка с запятой важна в Javascript, чтобы определить, где заканчивается команда или определение.И фигурные скобки также важны для определения блоков этих команд.Но вы можете иметь столько точек с запятой, сколько захотите.Если сомневаетесь, используйте точку с запятой, но будьте готовы, если кто-то вызовет вас за то, что он вам не нужен:)

0 голосов
/ 13 июля 2011

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

0 голосов
/ 13 июля 2011

вы можете написать несколько выражений внутри функции с помощью точки с запятой; точка с запятой используется для разделения утверждения. легко понять.

0 голосов
/ 13 июля 2011

Точки с запятой отмечают конец операторов в JS, но я не ставлю точки с запятой после закрывающей скобки, только после оператора в фигурной скобке и ВСЕГДА в операторе возврата.

В вашем примере я не нахожуэто необходимо.

0 голосов
/ 13 июля 2011

PHP использует точки с запятой в конце строк, поэтому я обычно использую их в javascript.

0 голосов
/ 13 июля 2011

Язык C использует точки с запятой в конце операторов, а также использует фигурные скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...