Spec-Zone.ru › ESLint

Запрет на метки

Запрет на использование помеченных операторов

Помеченные операторы в JavaScript используются совместно с break и continue для управления потоком выполнения вокруг нескольких циклов. Например:

outer:
    while (true) {

        while (true) {
            break outer;
        }
    }

Оператор break outer гарантирует, что этот код не приведет к бесконечному циклу, поскольку управление возвращается к следующему оператору после применения метки outer. Если этот оператор был изменён на просто break, управление вернётся к внешнему оператору while и произойдёт бесконечный цикл.

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

Детали правила

Это правило направлено на устранение использования помеченных операторов в JavaScript. Оно будет выдавать предупреждение при обнаружении помеченного оператора и при использовании break или continue с меткой.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-labels: "error"*/

label:while(true){// ...}

label:while(true){break label;}

label:while(true){continue label;}

label:switch(a){case0:break label;}

label:{break label;}

label:if(a){break label;}

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-labels: "error"*/

var f = {
    label: "foo"
};

while (true) {
    break;
}

while (true) {
    continue;
}

Параметры

Параметры позволяют использовать метки с операторами цикла или переключателя:

  • "allowLoop" (boolean, значение по умолчанию false) - Если этот параметр установлен true, это правило игнорирует метки, связанные с операторами цикла.
  • "allowSwitch" (boolean, значение по умолчанию false) - Если этот параметр установлен true, это правило игнорирует метки, связанные с операторами переключателя.

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

allowLoop

Примеры правильного кода для параметра { "allowLoop": true }:

Открыть в Playground
/*eslint no-labels: ["error", { "allowLoop": true }]*/

label:
    while (true) {
        break label;
    }

allowSwitch

Примеры правильного кода для параметра { "allowSwitch": true }:

Открыть в Playground
/*eslint no-labels: ["error", { "allowSwitch": true }]*/

label:
    switch (a) {
        case 0:
            break label;
    }

Когда не стоит использовать

Если вам нужно использовать помеченные операторы повсеместно, то вы можете безопасно отключить это правило.

Связанные правила

  • no-extra-label
  • no-label-var
  • no-unused-labels

Версия

Это правило было добавлено в ESLint v0.4.0.

Ссылки

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-labels

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API