Zum Inhalt springen
aviral gupta

// B3.4 · ca. 30 Min. · Einstieg

break und continue

Nach dieser Lektion beenden Sie eine Schleife, sobald sie gefunden hat, was sie sucht, überspringen fehlerhafte Einträge, ohne anzuhalten, und wissen, wo break und continue erlaubt sind.

Lektion 4 von 5 in B3 Kontrollfluss und Schleifen

Danach können Sie

  • Eine Schleife beim ersten Treffer mit break beenden und wissen, dass break in einem switch nur das switch verlässt
  • Ungültige Einträge mit continue überspringen, ohne dass continue die Änderung des Zählers einer while-Schleife überspringt
  • Ein break mit Label lesen und die SyntaxErrors eines break oder continue an der falschen Stelle beheben
  1. Aufwärmen · Aufgabe 1 von 7

    Zum Aufwärmen: Welches Schlüsselwort beendet eine Schleife sofort, sodass das Programm nach der Schleife weitermacht?

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt dieser Code aus?

    for (let i = 1; i <= 5; i++) {
      if (i === 3) {
        continue;
      }
      console.log(i);
    }
  3. Üben · Aufgabe 3 von 7

    Ergänzen Sie das Schlüsselwort, sodass das Programm die erste Temperatur über 30 ausgibt, also 31, und nicht weitersucht.

    const temps = [12, 18, 31, 25, 33];
    let firstHot;
    for (const t of temps) {
      if (t > 30) {
        firstHot = t;
        ____;
      }
    }
    console.log(firstHot);
    ;
  4. Üben · Aufgabe 4 von 7

    Ein switch in einer Schleife. Was gibt dieser Code aus?

    const commands = ["go", "stop", "go"];
    for (const c of commands) {
      switch (c) {
        case "stop":
          console.log("stopping");
          break;
        default:
          console.log("going");
      }
    }
  5. Üben · Aufgabe 5 von 7

    Jede Zeile steht als erste im Block von for (const n of [1, 2, 3, 4]) { … console.log(n); }. Ordnen Sie ihr die Zahlen zu, die die Schleife ausgibt.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Führen Sie diesen Code nicht aus. Was passiert?

    let i = 0;
    while (i < 5) {
      if (i === 2) {
        continue;
      }
      console.log(i);
      i++;
    }
  7. Anwenden · Aufgabe 7 von 7

    Mini-Aufgabe. Schreiben Sie ein Schrittzähler-Protokoll. Legen Sie die täglichen Schrittzahlen in ein Array, mit einigen fehlerhaften Einträgen wie "n/a" oder -1. Gehen Sie die Tage mit einer zählenden for-Schleife durch: Geben Sie für einen fehlerhaften Eintrag Day 2: no data aus und überspringen Sie ihn mit continue, geben Sie für einen gültigen Day 1: 5200 steps aus, und halten Sie mit break am ersten Tag an, der das Ziel von 10000 erreicht. Zum Schluss geben Sie Goal reached on day 5 aus (oder Goal not reached).

    Prüfen Sie Ihr Ergebnis anhand dieser Liste

Selbst programmieren

Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.

Ausgearbeitetes Beispiel

Ein Thermometer-Protokoll prüfen

Ein Thermometer hat acht Messwerte aufgezeichnet, zwei davon sind fehlerhaft: der Text "error" und der Wert -999, den das Gerät bei einem Ausfall schreibt. Das Programm überspringt die fehlerhaften mit continue, addiert die gültigen und hält mit break beim ersten Wert über 30 an, dem Alarm. Führen Sie es aus, ändern Sie dann 31.5 in 29 und sagen Sie die Ausgabe vorher, bevor Sie es erneut ausführen.

main.js

// Scan the readings of a thermometer.
const readings = [21.5, 22, "error", 23.5, -999, 24, 31.5, 25];
let total = 0;
let count = 0;
let firstAlarm;

for (const r of readings) {
  if (typeof r !== "number" || r < -50) {
    console.log("skip:", r);
    continue;
  }
  total += r;
  count++;
  if (r > 30) {
    firstAlarm = r;
    break;
  }
}

console.log("used", count, "readings");
console.log("average", (total / count).toFixed(1));
console.log("first alarm:", firstAlarm);

Ausführen mit

node main.js

Ausgabe

skip: error
skip: -999
used 5 readings
average 24.5
first alarm: 31.5
  • continue überspringt die fehlerhaften Werte: Sie werden ausgegeben, aber nie addiert oder gezählt.
  • break beendet die Schleife bei 31.5, also wird der letzte Wert, 25, nie verwendet.
  • Der Durchschnitt wird nach der Schleife berechnet, aus den verwendeten Werten: 122.5 / 5.
  • Liegt kein Wert über 30, läuft die Schleife bis zum Ende, und firstAlarm bleibt undefined.
Ändern und ausführen

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Übungen

Übung 1 von 2

Beim ersten Treffer anhalten

Das Programm soll den ersten Preis über dem Budget melden und dann nicht weitersuchen, meldet aber den letzten und prüft jeden Preis. Sorgen Sie dafür, dass es First price above 10: 12 at position 1 und dann Checked 2 prices ausgibt. Lassen Sie den Zähler checked++ als erste Zeile der Schleife stehen.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Führen Sie den Startcode aus: Er meldet 25, weil jeder spätere Treffer found überschreibt.

  2. Hinweis 2

    Sind found und position gesetzt, muss nichts mehr geprüft werden. Welches Schlüsselwort beendet die Schleife sofort?

  3. Hinweis 3

    Fügen Sie break; als letzte Zeile in das if ein.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

const prices = [4.5, 12, 7.25, 19.99, 3, 25];
const budget = 10;
let found;
let position;
let checked = 0;

for (let i = 0; i < prices.length; i++) {
  checked++;
  if (prices[i] > budget) {
    found = prices[i];
    position = i;
    break;
  }
}

console.log(`First price above ${budget}: ${found} at position ${position}`);
console.log(`Checked ${checked} prices`);
Auf dem eigenen Computer ausführen

Installieren Sie ECMAScript 2026 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.js

const prices = [4.5, 12, 7.25, 19.99, 3, 25];
const budget = 10;
let found;
let position;
let checked = 0;

for (let i = 0; i < prices.length; i++) {
  checked++;
  if (prices[i] > budget) {
    found = prices[i];
    position = i;
  }
}

console.log(`First price above ${budget}: ${found} at position ${position}`);
console.log(`Checked ${checked} prices`);

main.test.js

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {runMain} from './learnrun.js';

const lines = async () => (await runMain()).trimEnd().split('\n');

test('meldet den ersten Preis über dem Budget', async () => {
  const got = await lines();
  assert.equal(got[0], 'First price above 10: 12 at position 1', `die erste Zeile ist ${JSON.stringify(got[0])}, erwartet "First price above 10: 12 at position 1"`);
});

test('sucht nach dem Treffer nicht weiter', async () => {
  const got = await lines();
  assert.equal(got[1], 'Checked 2 prices', `die zweite Zeile ist ${JSON.stringify(got[1])}, erwartet "Checked 2 prices"`);
});

test('gibt genau zwei Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 2, `das Programm hat ${got.length} Zeile(n) ausgegeben, erwartet 2`);
});

package.json

{
  "type": "module"
}

package.json sagt Node.js, dass die .js-Dateien Module sind; lassen Sie die Datei im Ordner.

Programm ausführen:

node main.js

Prüfungen ausführen (learnrun.js muss im selben Ordner liegen):

node --test
learnrun.js herunterladen

Übung 2 von 2

Fehlerhafte Einträge überspringen

Ein Bestellformular hat diese Mengen geschickt, und einige sind unbrauchbar. Überspringen Sie jeden Eintrag, der keine Zahl ist oder nicht über 0 liegt: Geben Sie Skipped: two aus (mit dem Eintrag) und machen Sie mit continue beim nächsten weiter. Addieren und zählen Sie die übrigen, und geben Sie am Ende Total: 12 from 3 entries aus.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Führen Sie den Startcode aus: "two" macht aus der Summe Text, und 0 und -1 werden mitgezählt.

  2. Hinweis 2

    Ein fehlerhafter Eintrag ist einer, bei dem typeof q !== "number" || q <= 0 gilt. Prüfen Sie das als Erstes in der Schleife.

  3. Hinweis 3

    Geben Sie in diesem if die Zeile aus und schreiben Sie dann continue;, damit das Addieren darunter für diesen Eintrag übersprungen wird.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

const quantities = [3, "two", 0, 5, -1, 4];
let total = 0;
let used = 0;

for (const q of quantities) {
  if (typeof q !== "number" || q <= 0) {
    console.log(`Skipped: ${q}`);
    continue;
  }
  total += q;
  used++;
}

console.log(`Total: ${total} from ${used} entries`);
Auf dem eigenen Computer ausführen

Installieren Sie ECMAScript 2026 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.js

const quantities = [3, "two", 0, 5, -1, 4];
let total = 0;
let used = 0;

for (const q of quantities) {
  // Skip anything that is not a number above 0.
  total += q;
  used++;
}

console.log(`Total: ${total} from ${used} entries`);

main.test.js

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {runMain} from './learnrun.js';

const lines = async () => (await runMain()).trimEnd().split('\n');

test('meldet jeden fehlerhaften Eintrag', async () => {
  const got = await lines();
  assert.deepEqual(got.slice(0, 3), ['Skipped: two', 'Skipped: 0', 'Skipped: -1'], `die ersten drei Zeilen sind ${JSON.stringify(got.slice(0, 3))}`);
});

test('addiert nur die gültigen Einträge', async () => {
  const got = await lines();
  assert.equal(got[got.length - 1], 'Total: 12 from 3 entries', `die letzte Zeile ist ${JSON.stringify(got[got.length - 1])}, erwartet "Total: 12 from 3 entries"`);
});

test('gibt genau vier Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 4, `das Programm hat ${got.length} Zeile(n) ausgegeben, erwartet 4`);
});

package.json

{
  "type": "module"
}

package.json sagt Node.js, dass die .js-Dateien Module sind; lassen Sie die Datei im Ordner.

Programm ausführen:

node main.js

Prüfungen ausführen (learnrun.js muss im selben Ordner liegen):

node --test
learnrun.js herunterladen

Häufige Fehler

break, um ein if zu verlassen

const score = 120;
if (score > 100) {
  console.log("too high");
  break;
}
console.log("score", score);

Was Node.js ausgibt

SyntaxError: Illegal break statement

Warum, und die Lösung

break beendet eine Schleife oder ein switch, und ein if ist keins von beiden. Außerhalb einer Schleife oder eines switch kann die Datei nicht gelesen werden, also läuft nicht einmal die erste Zeile. Um ein if früh zu verlassen, schreiben Sie den Rest in ein else, oder drehen Sie die Prüfung um: if (score <= 100) { … }.

continue in einem switch ohne Schleife

const day = "sun";
switch (day) {
  case "sun":
    console.log("closed");
    continue;
  default:
    console.log("open");
}

Was Node.js ausgibt

SyntaxError: Illegal continue statement: no surrounding iteration statement

Warum, und die Lösung

continue heißt „mit dem nächsten Durchlauf der Schleife weitermachen“, und hier steht keine Schleife um das switch, nur das switch selbst. Ein case endet mit break, nicht mit continue. In einer Schleife ist continue in einem case erlaubt und macht mit dem nächsten Durchlauf der Schleife weiter.

Ein falsch geschriebenes Label

outer: for (const row of [1, 2]) {
  for (const col of [1, 2]) {
    if (row === col) {
      break outr;
    }
    console.log(row, col);
  }
}

Was Node.js ausgibt

SyntaxError: Undefined label 'outr'

Warum, und die Lösung

Ein Label wirkt nur, wenn break oder continue es genau so nennt und in der Anweisung steht, die es benennt. outr ist nicht outer, also findet JavaScript um das break herum kein solches Label, und die ganze Datei kann nicht gelesen werden. Schreiben Sie break outer;, oder nehmen Sie ein einfaches break, wenn es genügt, die innere Schleife zu verlassen.

JavaScript im Browser: die eigene Engine Ihres Browsers in einem abgeschotteten Worker. Syntaxfehler findet acorn 8.18.0, MIT. Lizenz und Quellcode

Abschlussquiz

5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.

Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

break: aufhören, sobald Sie es haben

break beendet die Schleife, in der es steht, sofort, und das Programm macht mit der ersten Anweisung nach dieser Schleife weiter. So halten Sie beim ersten Treffer an: for (const p of prices) { if (p > budget) { found = p; break; } }. Ohne break läuft die Schleife weiter, ein späterer Treffer überschreibt found, und Sie erhalten den letzten Treffer statt des ersten, nach mehr Arbeit. break wirkt in for, while und for...of gleich. In einem switch verlässt break nur das switch: Steht das switch in einer Schleife, macht die Schleife mit ihrem nächsten Durchlauf weiter.

continue: diesen Durchlauf überspringen, weitermachen

continue beendet nur den aktuellen Durchlauf und macht mit dem nächsten weiter. Es eignet sich, um fehlerhafte Einträge zu überspringen: Stellen Sie die Prüfung an den Anfang, if (typeof score !== "number") { continue; }, dann behandelt der Rest des Blocks nur gültige Werte. Wohin es springt, hängt von der Schleife ab: bei for...of zum nächsten Wert, bei einer for-Schleife zur Aktualisierung, i++ läuft also trotzdem, bei einer while-Schleife direkt zurück zur Bedingung. Ändert eine while-Schleife ihren Zähler am Ende des Blocks, überspringt ein continue darüber diese Zeile, die Bedingung ändert sich nie, und die Schleife endet nie. Ändern Sie den Zähler zuerst, oder nehmen Sie eine for-Schleife.

Wo sie erlaubt sind, und Labels

break und continue gehören in eine Schleife, break außerdem in ein switch. Überall sonst kann die Datei nicht gelesen werden, also läuft nichts. Ein break auf oberster Ebene, etwa um ein if zu verlassen, ergibt SyntaxError: Illegal break statement; nehmen Sie stattdessen else. Ein continue außerhalb einer Schleife ergibt SyntaxError: Illegal continue statement: no surrounding iteration statement. Ein Label gibt einer Anweisung einen Namen: outer: for (…) { for (…) { break outer; } } beendet beide Schleifen auf einmal, und continue outer; macht mit dem nächsten Durchlauf der äußeren Schleife weiter. Labels sind selten, und ein falsch geschriebenes ist ebenfalls ein SyntaxError: Undefined label.

Quellen

Zuletzt geprüft am 3. Oktober 2026