Zum Inhalt springen
aviral gupta

// B1.3 · ca. 30 Min. · Einstieg

Fehlermeldungen lesen

Nach dieser Lektion lesen Sie einen Fehlerbericht, erkennen am Namen, wonach Sie suchen, gehen zur genauen Zeile und Spalte und reparieren ein Programm Fehler für Fehler.

Lektion 3 von 5 in B1 Erste Schritte

Danach können Sie

  • SyntaxError, ReferenceError und TypeError unterscheiden und wissen, welcher eine Datei vor dem Start stoppt
  • Einen Bericht lesen: das ^ unter dem Code, Name: message und main.js:Zeile:Spalte
  • Ein Programm Fehler für Fehler reparieren und einen Logikfehler ohne Meldung finden
  1. Aufwärmen · Aufgabe 1 von 7

    Zum Aufwärmen: Nach welchen dieser Meldungen sind schon Zeilen des Programms gelaufen? Wählen Sie alle zutreffenden Antworten.

    Wählen Sie alle zutreffenden aus.

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Dieses Programm stoppt mit ReferenceError: totl is not defined. Die at-Zeile darunter endet auf main.js, eine Zeile und eine Spalte. Welche?

    let price = 4;
    let total = price * 2;
    console.log(totl);
  3. Üben · Aufgabe 3 von 7

    Diese Zeile ergibt SyntaxError: Invalid or unexpected token. Ergänzen Sie das eine Zeichen, das sie repariert, sodass sie Total: 12 ausgibt.

    console.log("Total:____, 12);
    console.log("Total:, 12);
  4. Üben · Aufgabe 4 von 7

    Mit welcher Art von Fehler stoppt dieses Programm?

    let word;
    console.log(word.length);
  5. Üben · Aufgabe 5 von 7

    Ordnen Sie jeder Meldung den Fehler zu, auf den sie meist hinweist.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Beide Zeilen enthalten einen Fehler. Welchen Fehler meldet das Ausführen?

    console.log(totl);
    console.log("done";
  7. Anwenden · Aufgabe 7 von 7

    Kleine Aufgabe: absichtlich kaputt machen. Schreiben Sie ein funktionierendes Programm aus vier Zeilen mit einer const, einem let, das neu zugewiesen wird, und einem console.log. Bauen Sie dann drei Fehler ein, einen nach dem anderen: ein schließendes Anführungszeichen entfernen, eine Variable falsch schreiben, die const neu zuweisen. Sagen Sie vor jedem Lauf den Namen des Fehlers vorher; notieren Sie danach Meldung, Zeile und Spalte. Machen Sie jeden Fehler vor dem nächsten rückgängig.

    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

Einen Logikfehler mit console.log aufspüren

Dieses Programm soll den Durchschnitt von drei Testergebnissen ausgeben, 80, aber seine erste Zeile gibt 180 aus, ganz ohne Fehlermeldung. Statt zu raten, gibt es die Zwischenwerte aus: die Summe und das dritte Ergebnis geteilt durch 3. Sie zeigen, dass nur das dritte Ergebnis geteilt wurde; die korrigierte Zeile setzt die Summe deshalb in Klammern.

main.js

// Average of three test scores. It should be 80.
const first = 60;
const second = 90;
const third = 90;
const wrongAverage = first + second + third / 3;
console.log("wrong average:", wrongAverage);
console.log("sum:", first + second + third);
console.log("third / 3:", third / 3);
const average = (first + second + third) / 3;
console.log("average:", average);

Ausführen mit

node main.js

Ausgabe

wrong average: 180
sum: 240
third / 3: 30
average: 80
  • Ein Logikfehler läuft bis zum Ende: Das einzige Zeichen ist ein Ergebnis, das von Ihrer Rechnung von Hand abweicht.
  • 60 + 90 + 30 ist 180, die Zwischenwerte erklären also das falsche Ergebnis: Die Division kam vor der Addition.
  • Beschriften Sie jeden ausgegebenen Wert, etwa mit "sum:", damit Sie die Zeilen auseinanderhalten.
  • Sobald das Ergebnis stimmt, löschen Sie die zusätzlichen console.log-Zeilen.
Ä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

Drei Fehler, ein Lauf nach dem anderen

Dieses Kassenzettel-Programm hat drei Fehler, jeder von einer anderen Art. Führen Sie es aus, korrigieren Sie die Zeile, auf die der Bericht zeigt, und führen Sie es erneut aus, bis es funktioniert. Ändern Sie nicht, was es ausgibt: Item: Notebook, Count: 3, Total: 13.5, dann Item: Pen und Total: 4.5.

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

    Der erste Lauf meldet einen SyntaxError: missing ) after argument list, in Zeile 4.

  2. Hinweis 2

    Der zweite Lauf meldet einen ReferenceError. Vergleichen Sie den Namen in der Meldung Buchstabe für Buchstabe mit dem Namen in Zeile 1–3.

  3. Hinweis 3

    Der dritte Lauf meldet einen TypeError in Zeile 7: Eine Variable, die neu zugewiesen wird, braucht let.

Eine Lösung zeigen

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

let item = "Notebook";
let price = 4.5;
let count = 3;
console.log("Item:", item);
console.log("Count:", count);
console.log("Total:", price * count);
item = "Pen";
price = 1.5;
console.log("Item:", item);
console.log("Total:", price * count);
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 item = "Notebook";
let price = 4.5;
let count = 3;
console.log("Item:", item;
console.log("Count:", Count);
console.log("Total:", price * count);
item = "Pen";
price = 1.5;
console.log("Item:", item);
console.log("Total:", price * count);

main.test.js

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

test('läuft ohne Fehler', async () => {
  await runMain();
});

test('gibt den ganzen Kassenzettel aus', async () => {
  const got = (await runMain()).trimEnd().split('\n');
  assert.deepEqual(got, ['Item: Notebook', 'Count: 3', 'Total: 13.5', 'Item: Pen', 'Total: 4.5'], `das Programm gab ${JSON.stringify(got)} aus`);
});

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

Keine Meldung, falsches Ergebnis

Dieses Programm rechnet Celsius in Fahrenheit um, gibt aber 25 C is 82.6 F und 100 C is 180 F aus, ohne Fehler. Richtig sind 77 und 212: mit 9 multiplizieren, durch 5 teilen, dann 32 addieren. Geben Sie Zwischenwerte aus, wenn es hilft, finden Sie die zwei falschen Zeilen und korrigieren Sie sie.

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

    Rechnen Sie zuerst 25 * 9 / 5 + 32 von Hand aus: 45 + 32 = 77.

  2. Hinweis 2

    In Zeile 2 wird 32 * 9 / 5 vor dem + berechnet: Punkt- vor Strichrechnung.

  3. Hinweis 3

    Zeile 5 lässt einen Schritt der Formel ganz weg.

Eine Lösung zeigen

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

let celsius = 25;
let fahrenheit = celsius * 9 / 5 + 32;
console.log(celsius, "C is", fahrenheit, "F");
celsius = 100;
fahrenheit = celsius * 9 / 5 + 32;
console.log(celsius, "C is", fahrenheit, "F");
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

let celsius = 25;
let fahrenheit = celsius + 32 * 9 / 5;
console.log(celsius, "C is", fahrenheit, "F");
celsius = 100;
fahrenheit = celsius * 9 / 5;
console.log(celsius, "C is", fahrenheit, "F");

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('rechnet 25 Grad um', async () => {
  const got = await lines();
  assert.equal(got[0], '25 C is 77 F', `die erste Zeile ist ${JSON.stringify(got[0])}, erwartet: "25 C is 77 F"`);
});

test('rechnet 100 Grad um', async () => {
  const got = await lines();
  assert.equal(got[1], '100 C is 212 F', `die zweite Zeile ist ${JSON.stringify(got[1])}, erwartet: "100 C is 212 F"`);
});

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

Nur auf die gemeldete Zeile schauen

const fruits = ["apple", "pear",
console.log(fruits);

Was Node.js ausgibt

SyntaxError: Unexpected token ';'

Warum, und die Lösung

Der Bericht zeigt auf Zeile 2, aber Zeile 2 ist in Ordnung. Die Liste in Zeile 1 wird nie geschlossen, also liest JavaScript Zeile 2 als Teil der Liste und gibt beim ; auf, das es dort nicht erwartet. Sieht die gemeldete Zeile richtig aus, lesen Sie die Zeilen darüber nach einem nicht geschlossenen ], ) oder Anführungszeichen ab. Hier: const fruits = ["apple", "pear"];

Eine Variable benutzen, die noch keinen Wert hat

let word;
console.log(word.length);

Was Node.js ausgibt

TypeError: Cannot read properties of undefined (reading 'length')

Warum, und die Lösung

Die Meldung nennt beide Teile: den Wert, undefined, und was von ihm verlangt wurde, length. word wurde ohne Wert deklariert, enthält also undefined, und undefined hat keine Eigenschaften. Geben Sie der Variablen einen Wert, bevor Sie sie benutzen, etwa let word = "hello";.

Ein Text ohne schließendes Anführungszeichen

console.log("Hello);

Was Node.js ausgibt

SyntaxError: Invalid or unexpected token

Warum, und die Lösung

Die Meldung erwähnt keine Anführungszeichen, deshalb lohnt es sich, sie zu kennen: V8 meldet Invalid or unexpected token, wenn ein Text ohne sein schließendes Anführungszeichen bis zum Zeilenende läuft. Suchen Sie einen Text, der mit " oder ' beginnt, und prüfen Sie, ob er mit demselben Zeichen endet: console.log("Hello");

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

Die Teile eines Fehlerberichts

Scheitert ein Programm in Zeile 3, gibt Node.js Datei und Zeile aus, main.js:3, dann diese Codezeile mit einem ^ unter der Stelle, an der es scheiterte. Nach einer Leerzeile folgt die wichtigste Zeile, Name: message, etwa ReferenceError: totl is not defined. Darunter steht der Stack, Zeilen, die mit at beginnen. Die erste endet auf main.js:3:13: Zeile 3, Spalte 13. Zeilen mit node:internal sind Code von Node.js selbst; überspringen Sie sie. Der Editor auf dieser Seite zeigt dasselbe, nur mit Ihren Zeilen. Die Meldungen stammen von V8, wie in Chrome; Firefox und Safari formulieren manche anders.

Drei Namen, drei Fragen

Der Name sagt Ihnen, was Sie fragen sollten. SyntaxError: Welches Zeichen verletzt die Grammatik? Er wird beim Lesen der Datei gefunden, also läuft nichts. Die Meldung nennt, was JavaScript nicht erwartet hat, etwa Unexpected token ')'; Invalid or unexpected token bedeutet meist einen Text ohne schließendes Anführungszeichen. ReferenceError: Welcher Name? Entweder gibt es ihn nicht, x is not defined, oder er wird über seinem let oder const benutzt, Cannot access 'x' before initialization. TypeError: Den Namen gibt es, also welchen Wert hat er? console.lg is not a function oder Cannot read properties of undefined (reading 'length'): Der Wert ist undefined.

Ein Fehler nach dem anderen, und Fehler ohne Meldung

Ein Lauf meldet einen Fehler: die erste Stelle, an der Lesen oder Ausführen scheiterte. Beheben Sie diesen, führen Sie erneut aus und lesen Sie dann den nächsten; raten Sie nicht beim Rest. Ein SyntaxError irgendwo in der Datei kommt vor jedem anderen Fehler, weil die ganze Datei gelesen wird, bevor Zeile 1 läuft. Die Zeile im Bericht ist die, an der JavaScript aufgab, und MDN warnt, dass der Fehler nicht unbedingt dort liegt: Ein fehlendes ] in Zeile 1 wird in Zeile 2 gemeldet. Ein Logikfehler hat gar keine Meldung, nur eine falsche Ausgabe. Geben Sie Zwischenwerte mit console.log aus und vergleichen Sie jeden mit Ihrer Erwartung.

Quellen

Zuletzt geprüft am 30. September 2026