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