Spec-Zone.ru › JavaScript

SyntaxError: немаркированный break должен находиться внутри цикла или switch

Исключение JavaScript "unlabeled break must be inside loop or switch" возникает, когда оператор break не находится внутри цикла или оператора switch.

Сообщение

SyntaxError: Illegal break statement (V8-based)
SyntaxError: unlabeled break must be inside loop or switch (Firefox)
SyntaxError: 'break' is only valid inside a switch or loop statement. (Safari)

Тип ошибки

SyntaxError.

Что пошло не так?

Операторы break могут использоваться для выхода из цикла или оператора switch, и их использование где-либо еще является синтаксической ошибкой. В качестве альтернативы вы можете предоставить метку (label) оператору break, чтобы выйти из любого оператора с этой меткой — однако, если метка не ссылается на содержащий оператор, будет выдана другая ошибка SyntaxError: label not found.

Примеры

Несинтаксический break

break нельзя использовать вне switch или циклов.

let score = 0;

function increment() {
  if (score === 100)
    break; // SyntaxError: unlabeled break must be inside loop or switch
  }
  score++;
}

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

let score = 0;

function increment() {
  if (score === 100) {
    return;
  }
  score++;
}

Использование break в колбэках

break нельзя использовать в колбэках, даже если колбэк вызывается из цикла.

let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

while (containingIndex < matrix.length) {
  matrix[containingIndex].forEach((value) => {
    if (value === 5) {
      break; // SyntaxError: unlabeled break must be inside loop or switch
    }
  });
  containingIndex++;
}

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

let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

outer: while (containingIndex < matrix.length) {
  for (const value of matrix[containingIndex]) {
    if (value === 5) {
      break outer;
    }
  }
  containingIndex++;
}
let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

while (containingIndex < matrix.length) {
  if (matrix[containingIndex].includes(5)) {
    break;
  }
  containingIndex++;
}

Невозможно досрочно завершить цикл forEach(). Вместо этого вы можете использовать some() или преобразовать его в цикл for...of.

array.forEach((value) => {
  if (value === 5) {
    break; // SyntaxError: unlabeled break must be inside loop or switch
  }
  // do something with value
});
array.some((value) => {
  if (value === 5) {
    return true;
  }
  // do something with value
  return false;
});
for (const value of array) {
  if (value === 5) {
    break;
  }
  // do something with value
}

Смотрите также

  • break

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Bad_break

Spec-Zone.ru

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