Почему нет?

Недавно несколько друзей, плохо знакомых с JavaScript, спросили меня: нужно ли мне добавлять точки с запятой в JavaScript?

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

  • В популярных языках есть много необязательных точек с запятой. Например, Go, Ruby, Python и Swift могут добавлять точки с запятой, но никто их не добавляет.
  • Отсутствие точки с запятой может сделать код более понятным и уменьшить визуальную нагрузку.
  • и многое другое.

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

Или это:

Это связано с тем, что интерпретаторы JavaScript (например, V8) обрабатывают эти коды как одну и ту же строку операторов. То есть приведенные выше два примера будут интерпретироваться так:

// Example1
const test = {
  name: 1,
}(() => {
  test.name = 2;
})();
// Example2
const test = {
  name: 1,
}[(2, 3)].map(() => {});

Так что конечно выдаст ошибку. Решение состоит в том, чтобы добавить точку с запятой перед ( или [ или добавить точку с запятой к предыдущему оператору.

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

Причиной этого является автоматическая вставка точки с запятой (ASI) в JavaScript. Приведенный выше код будет проанализирован следующим образом:

(function test() {
  return;
  {
    name: 1;
  }
})();

Дополнительное описание этого правила см. в спецификации.

Вам не кажется это правило странным, почему оно так устроено?

Брендан Эйх (создатель JavaScript) упоминает почему в своем сообщении в блоге, и это именно то, что он говорит:

ASI — это (формально говоря) процедура исправления синтаксических ошибок. Если вы начнете кодировать так, как если бы это было универсальное правило значимого перехода на новую строку, у вас возникнут проблемы.

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

Итак, вернемся к теме, должны ли мы добавлять точки с запятой в код JavaScript?

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

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

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

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

Если вы используете в своем проекте инструменты форматирования, такие как Prettier, то я рекомендую вам, конечно же, сотрудничать с Git-хуками, такими как хаски, simple-git-hooks и т. д., чтобы гарантировать, что код, добавляемый в удаленный в едином стиле.

Кроме того, с "editor.formatOnSave": true конфигурацией VS Code вы можете видеть изменения формата во времени при сохранении кода, чтобы убедиться, что значение, которое вы хотите выразить.

Например, когда вы настраиваете добавлять точки с запятой ко всему коду, вы можете добавлять точки с запятой только в те необходимые места при записи, а затем VS Code отформатирует ваш код в соответствии с конфигурацией при сохранении следующим образом:

Это все для этой статьи. Итак, что вы думаете о точках с запятой в JavaScript? Не стесняйтесь выражать свои мысли в разделе комментариев!

На сегодня все. Меня зовут Закари, и я буду продолжать публиковать истории, связанные с веб-разработкой. Если вам нравятся такие истории и вы хотите поддержать меня, пожалуйста, подумайте о том, чтобы стать участником Medium. Это стоит 5 долларов в месяц и дает вам неограниченный доступ к контенту Medium. Я получу небольшую комиссию, если вы зарегистрируетесь по моей ссылке.

Ваша поддержка очень важна для меня — спасибо.