Aufwärmen · Aufgabe 1 von 7
// 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.
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
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); }Ü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);;Ü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"); } }Ü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.
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++; }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.jsAusgabe
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
Hinweis 1
Führen Sie den Startcode aus: Er meldet 25, weil jeder spätere Treffer found überschreibt.
Hinweis 2
Sind found und position gesetzt, muss nichts mehr geprüft werden. Welches Schlüsselwort beendet die Schleife sofort?
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.jsPrüfungen ausführen (learnrun.js muss im selben Ordner liegen):
node --testlearnrun.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
Hinweis 1
Führen Sie den Startcode aus: "two" macht aus der Summe Text, und 0 und -1 werden mitgezählt.
Hinweis 2
Ein fehlerhafter Eintrag ist einer, bei dem typeof q !== "number" || q <= 0 gilt. Prüfen Sie das als Erstes in der Schleife.
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.jsPrüfungen ausführen (learnrun.js muss im selben Ordner liegen):
node --testlearnrun.js herunterladenHä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 statementWarum, 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 statementWarum, 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.