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

Точки с запятой необходимы для JavaScript. Когда ваш код запускается, точки с запятой — это то, что компилятор использует, чтобы различать отдельные операторы, не давая вашим строкам кода быть перемешанными в один гигантский оператор. Но, как вы, вероятно, знаете, вам не нужно добавлять их в свой код, чтобы он правильно скомпилировался. Это связано с автоматической вставкой точки с запятой. Есть правила, где и как это происходит, о которых вы можете прочитать здесь. Но главное знать, что это происходит.

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

Теперь, согласно определению MDN:

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

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

Точка с запятой после нашего условного оператора if(dogIsSmelly)используется для обозначения отсутствия оператора, хотя синтаксис JavaScript предполагает его наличие. Компилятор считает, что все, что будет дальше, будет совершенно новым, не связанным оператором. Оператор if завершается, и запускается washDog(). Это имеет смысл, потому что точка с запятой сообщает компилятору, что оператор завершен. Но обратите внимание, что если мы удаляем точку с запятой, следующая строка считается оператором выполнения условного оператора.

Здесь вы можете видеть, что washDog() вызывается только тогда, когда dogIsSmelly === true . Вы также можете увидеть автоматическую вставку точки с запятой в действии! При компиляции без фигурных скобок, четко указывающих оператор выполнения, только первая строка после условного оператора считается частью этого условного оператора. При компиляции после строки washDog(“false”) автоматически добавляется точка с запятой, завершающая оператор условного выполнения, и следующий console.log() запускается как обычно.

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

Имейте в виду, что в этом случае вам не поможет даже АСИ. Если запустить цикл for без точки с запятой в конце, вы получите Uncaught SyntaxError: Unexpected end of input .

Точка с запятой также часто используется в начале библиотек или файлов JavaScript, так что вы можете легко объединить несколько файлов вместе. Если в конце одного из ваших файлов отсутствовала точка с запятой, а ASI по какой-то причине не обработал его, вы можете случайно скомпилировать какой-то код, смешанный воедино. Добавление точки с запятой в начало файла предотвратит добавление к нему того, что было скомпилировано до него.

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

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