Zum Inhalt springen
aviral gupta

// B2.5 · ca. 37 Min. · Einstieg

Projekt: ein Einheitenumrechner

Nach diesem Projekt wandeln Sie Texteingaben in Zahlen um, prüfen sie, rechnen sie mit benannten Konstanten um und geben saubere Ergebnisse aus, etwa 42.195 km = 26.22 mi.

Lektion 5 von 5 in B2 Grammatik, Typen und Operatoren

Ende des Moduls

Danach können Sie

  • Umrechnungsfaktoren in benannten Konstanten halten und mit der richtigen Formel umrechnen
  • Ergebnisse mit toFixed und Template-Literalen formatieren
  • Eingabewerte mit typeof, Number() und Number.isNaN prüfen, bevor Sie sie umrechnen
  1. Aufwärmen · Aufgabe 1 von 7

    Zum Aufwärmen: Welcher dieser Werte gehört in eine const mit einem Namen in Großbuchstaben, etwa KM_PER_MILE?

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Die Eingabe kommt als Text an. Was gibt dieser Code aus?

    const km = "10";
    console.log(km + 5, Number(km) + 5);
  3. Üben · Aufgabe 3 von 7

    Ergänzen Sie die Methode, die die Meilen auf zwei Nachkommastellen rundet, sodass das Programm 6.21 ausgibt.

    const KM_PER_MILE = 1.609344;
    const km = 10;
    const miles = km / KM_PER_MILE;
    console.log(miles.____(2));
    console.log(miles.(2));
  4. Üben · Aufgabe 4 von 7

    Was gibt dieser Code aus?

    console.log(typeof "12", typeof Number("12"), typeof Number("12 km"));
  5. Üben · Aufgabe 5 von 7

    Ordnen Sie jedem Ausdruck zu, was console.log dafür ausgibt.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Was gibt dieser Code aus?

    const total = 0.1 + 0.2;
    console.log(total.toFixed(2), total.toFixed(2) === 0.3);
  7. Anwenden · Aufgabe 7 von 7

    Kleine Aufgabe. Schreiben Sie den ganzen Umrechner selbst: die zwei Faktoren als Konstanten, drei Eingaben als Text (eine Strecke, eine Masse und eine Temperatur), ihre Typen vor und nach Number(), eine Zeile pro Umrechnung, formatiert mit toFixed und einem Template-Literal, und eine letzte Zeile, die eine ungültige Eingabe wie "12 km" mit Number.isNaN prüft. Ändern Sie dann eine Eingabe und sagen Sie die Ausgabe vorher.

    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

Der Einheitenumrechner

Die drei Eingaben stehen als Text im Programm, weil der Editor keine Tastatureingabe hat; auch ein Formular auf einer Seite würde Text liefern. Das Programm zeigt den Typ vor und nach Number(), rechnet jeden Wert mit einem benannten Faktor oder einer Formel um und gibt saubere Ergebnisse aus. Die letzte Zeile zeigt, was aus einer ungültigen Eingabe wird. Ändern Sie eine Eingabe oder die Zahl der Nachkommastellen und sagen Sie die Ausgabe vorher, bevor Sie es erneut ausführen.

main.js

// A unit converter. The inputs are text, as a form field would give them.
const KM_PER_MILE = 1.609344;
const KG_PER_POUND = 0.45359237;

const distanceInput = "42.195";
const massInput = "70";
const celsiusInput = "21.5";

console.log(`Before: ${typeof distanceInput}`);
const km = Number(distanceInput);
const kg = Number(massInput);
const celsius = Number(celsiusInput);
console.log(`After: ${typeof km}`);

console.log(`${km} km = ${(km / KM_PER_MILE).toFixed(2)} mi`);
console.log(`${kg} kg = ${(kg / KG_PER_POUND).toFixed(1)} lb`);
console.log(`${celsius} °C = ${(celsius * 9 / 5 + 32).toFixed(1)} °F`);

const badInput = "12 km";
const bad = Number(badInput);
console.log(`"${badInput}" is NaN: ${Number.isNaN(bad)}`);

Ausführen mit

node main.js

Ausgabe

Before: string
After: number
42.195 km = 26.22 mi
70 kg = 154.3 lb
21.5 °C = 70.7 °F
"12 km" is NaN: true
  • typeof zeigt den Wechsel: Die Eingabe ist ein String, der umgewandelte Wert eine Zahl.
  • Jeder Faktor steht einmal im Code, in einer const, und wird über seinen Namen verwendet.
  • toFixed(2) und toFixed(1) runden nur, was ausgegeben wird; km und kg behalten ihre vollen Werte.
  • "12 km" ist als Ganzes keine Zahl, also liefert Number NaN, und Number.isNaN meldet es.
Ä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 3

Schritt 1: Kilometer in Meilen

Rechnen Sie zwei Strecken, die als Text vorliegen, in Meilen um: "10" und "21.0975". Wandeln Sie jede Eingabe mit Number() um, teilen Sie durch KM_PER_MILE und geben Sie je eine Zeile aus, mit den Meilen auf zwei Nachkommastellen gerundet: 10 km = 6.21 mi und 21.0975 km = 13.11 mi. Verwenden Sie für jede Zeile ein Template-Literal.

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: Die Meilen erscheinen als 6.2137119223733395. toFixed(2) rundet das auf 6.21.

  2. Hinweis 2

    Setzen Sie Klammern um die Division vor .toFixed: (km / KM_PER_MILE).toFixed(2).

  3. Hinweis 3

    Ein Template-Literal baut die Zeile: `${km} km = ${(km / KM_PER_MILE).toFixed(2)} mi`. Machen Sie dasselbe für die zweite Eingabe.

Eine Lösung zeigen

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

const KM_PER_MILE = 1.609344;
const distanceInput = "10";
const halfMarathonInput = "21.0975";

const km = Number(distanceInput);
console.log(`${km} km = ${(km / KM_PER_MILE).toFixed(2)} mi`);
const halfKm = Number(halfMarathonInput);
console.log(`${halfKm} km = ${(halfKm / KM_PER_MILE).toFixed(2)} mi`);
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 KM_PER_MILE = 1.609344;
const distanceInput = "10";
const halfMarathonInput = "21.0975";

// Print: 10 km = 6.21 mi
console.log(distanceInput, "km =", distanceInput / KM_PER_MILE, "mi");

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 10 km um', async () => {
  const got = await lines();
  assert.equal(got[0], '10 km = 6.21 mi', `die erste Zeile ist ${JSON.stringify(got[0])}, erwartet: "10 km = 6.21 mi"`);
});

test('rechnet den Halbmarathon um', async () => {
  const got = await lines();
  assert.equal(got[1], '21.0975 km = 13.11 mi', `die zweite Zeile ist ${JSON.stringify(got[1])}, erwartet: "21.0975 km = 13.11 mi"`);
});

test('gibt genau zwei Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 2, `das Programm gab ${got.length} Zeile(n) aus, 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 3

Schritt 2: die Eingaben prüfen

Zeigen Sie vor dem Umrechnen, was die Eingaben sind. Geben Sie massInput: string aus (den Typ der Eingabe), wandeln Sie sie mit Number() um und geben Sie kg: number aus, dann die Masse in Pfund mit einer Nachkommastelle: 70 kg = 154.3 lb. Zuletzt wandeln Sie heightInput um und geben "1,80" is NaN: true aus, mit der Eingabe in doppelten Anführungszeichen und der Prüfung durch Number.isNaN.

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

    typeof massInput ergibt "string"; in einem Template-Literal: `massInput: ${typeof massInput}`.

  2. Hinweis 2

    Ein Pfund sind KG_PER_POUND Kilogramm, also sind die Pfund kg / KG_PER_POUND. Runden Sie mit .toFixed(1).

  3. Hinweis 3

    Doppelte Anführungszeichen können in Backticks einfach stehen bleiben: `"${heightInput}" is NaN: ${Number.isNaN(height)}`.

Eine Lösung zeigen

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

const KG_PER_POUND = 0.45359237;
const massInput = "70";
const heightInput = "1,80";

console.log(`massInput: ${typeof massInput}`);
const kg = Number(massInput);
console.log(`kg: ${typeof kg}`);
console.log(`${kg} kg = ${(kg / KG_PER_POUND).toFixed(1)} lb`);

const height = Number(heightInput);
console.log(`"${heightInput}" is NaN: ${Number.isNaN(height)}`);
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 KG_PER_POUND = 0.45359237;
const massInput = "70";
const heightInput = "1,80";

// 1. Print the type of massInput, convert it, print the type of kg.
// 2. Print the mass in pounds, with one decimal.
// 3. Convert heightInput and print whether the result is NaN.

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('zeigt die Typen vor und nach Number()', async () => {
  const got = await lines();
  assert.deepEqual(got.slice(0, 2), ['massInput: string', 'kg: number'], `die ersten zwei Zeilen sind ${JSON.stringify(got.slice(0, 2))}`);
});

test('rechnet 70 kg in Pfund um', async () => {
  const got = await lines();
  assert.equal(got[2], '70 kg = 154.3 lb', `die dritte Zeile ist ${JSON.stringify(got[2])}, erwartet: "70 kg = 154.3 lb"`);
});

test('erkennt, dass "1,80" keine Zahl ist', async () => {
  const got = await lines();
  assert.equal(got[3], '"1,80" is NaN: true', `die vierte Zeile ist ${JSON.stringify(got[3])}, erwartet: ${JSON.stringify('"1,80" is NaN: true')}`);
});

test('gibt genau vier Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 4, `das Programm gab ${got.length} Zeile(n) aus, 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

Übung 3 von 3

Schritt 3: Temperaturen in beide Richtungen

Dieser Teil rechnet 21.5 °C in Fahrenheit und 98.6 °F in Celsius um, aber die zweite Zeile ist falsch, und keine ist sauber formatiert. Ausgegeben werden sollen 21.5 °C = 70.7 °F und 98.6 °F = 37.0 °C. Korrigieren Sie die Reihenfolge der Rechnung in der zweiten Formel und runden Sie beide Ergebnisse auf eine Nachkommastelle. Es gibt keine Fehlermeldung: Vergleichen Sie die Ausgabe mit dem, was herauskommen soll.

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 Startcode gibt für 98.6 °F den Wert 80.82222222222222 aus: 32 * 5 / 9 wird zuerst berechnet und dann abgezogen.

  2. Hinweis 2

    Klammern bestimmen die Reihenfolge: (fahrenheit - 32) * 5 / 9.

  3. Hinweis 3

    Setzen Sie jede ganze Rechnung in Klammern und hängen Sie .toFixed(1) an: Aus 37 wird "37.0".

Eine Lösung zeigen

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

const celsiusInput = "21.5";
const fahrenheitInput = "98.6";
const celsius = Number(celsiusInput);
const fahrenheit = Number(fahrenheitInput);

console.log(`${celsius} °C = ${(celsius * 9 / 5 + 32).toFixed(1)} °F`);
console.log(`${fahrenheit} °F = ${((fahrenheit - 32) * 5 / 9).toFixed(1)} °C`);
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 celsiusInput = "21.5";
const fahrenheitInput = "98.6";
const celsius = Number(celsiusInput);
const fahrenheit = Number(fahrenheitInput);

console.log(`${celsius} °C = ${celsius * 9 / 5 + 32} °F`);
console.log(`${fahrenheit} °F = ${fahrenheit - 32 * 5 / 9} °C`);

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

test('rechnet 98.6 °F in Celsius um, mit einer Nachkommastelle', async () => {
  const got = await lines();
  assert.equal(got[1], '98.6 °F = 37.0 °C', `die zweite Zeile ist ${JSON.stringify(got[1])}, erwartet: "98.6 °F = 37.0 °C"`);
});

test('gibt genau zwei Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 2, `das Programm gab ${got.length} Zeile(n) aus, 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

Häufige Fehler

toFixed auf der Texteingabe

const distanceInput = "42.195";
console.log(distanceInput.toFixed(2));

Was Node.js ausgibt

TypeError: distanceInput.toFixed is not a function

Warum, und die Lösung

toFixed ist eine Methode von Zahlen, und distanceInput ist noch ein String, der kein toFixed hat. Erst umwandeln, dann formatieren: Number(distanceInput).toFixed(2), oder besser: Halten Sie die Zahl in einer eigenen const km = Number(distanceInput); und rufen Sie km.toFixed(2) bei der Ausgabe auf.

Einen Umrechnungsfaktor ändern

const KM_PER_MILE = 1.609344;
KM_PER_MILE = 1.6;

Was Node.js ausgibt

TypeError: Assignment to constant variable.

Warum, und die Lösung

Einer const kann man keinen neuen Wert geben, und genau dafür steht ein Faktor in einer const: Keine Zeile kann ihn versehentlich runden oder ändern. Wenn Sie in der Ausgabe eine kürzere Zahl möchten, runden Sie das Ergebnis bei der Ausgabe mit toFixed und lassen den Faktor, wie er ist.

Ein Template-Literal ohne schließenden Backtick

const km = 5;
console.log(`${km} km);

Was Node.js ausgibt

SyntaxError: Unexpected end of input

Warum, und die Lösung

Ein Template-Literal beginnt und endet mit einem Backtick. Fehlt der schließende, liest JavaScript den Rest der Datei als Teil des Textes und erreicht das Ende, während es noch darin steckt. Wie bei jedem SyntaxError läuft keine Zeile. Schließen Sie es: console.log(`${km} km`);.

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

Konstanten für die Faktoren, eine Formel pro Umrechnung

Eine Meile sind 1.609344 km und ein Pfund 0.45359237 kg. Legen Sie solche Faktoren in eine const mit einem Namen in Großbuchstaben, etwa KM_PER_MILE: Der Name sagt, was die Zahl bedeutet, der Wert steht an einer Stelle, und eine Zeile, die ihn ändern will, stoppt das Programm mit einem TypeError. Der Name zeigt auch die Richtung: km / KM_PER_MILE ergibt Meilen, miles * KM_PER_MILE ergibt Kilometer. Temperaturen brauchen eine Formel: celsius * 9 / 5 + 32 ergibt Fahrenheit, (fahrenheit - 32) * 5 / 9 ergibt Celsius. Ohne die Klammern kommen * und / zuerst, und das Ergebnis ist falsch.

Text rein, Zahl raus: typeof, Number() und NaN

Werte aus einem Formularfeld kommen als Text an: typeof "42.195" ist "string". Number("42.195") macht daraus die Zahl 42.195, und typeof ergibt dann "number". Ohne Number() verbindet + Text: "10" + 5 ist "105". Der ganze Text muss eine Zahl sein, mit Punkt als Dezimaltrennzeichen, also ergeben Number("12 km") und Number("1,80") beide NaN. Prüfen Sie ein Ergebnis mit Number.isNaN, bevor Sie ihm trauen. Eine Falle: Number("") ergibt 0, nicht NaN, also sieht ein leeres Feld wie die Zahl null aus.

Saubere Ausgabe: toFixed und Template-Literale

Eine Division ergibt selten eine runde Zahl: 10 / KM_PER_MILE ist 6.2137119223733395. (6.2137119223733395).toFixed(2) rundet auf zwei Nachkommastellen und füllt, wo nötig, mit Nullen auf, also ist (37).toFixed(1) "37.0". toFixed gibt einen String zurück; rechnen Sie also zuerst alles aus und rufen Sie es zuletzt auf, bei der Ausgabe. Setzen Sie Klammern um die Rechnung: (km / KM_PER_MILE).toFixed(2). Ein Template-Literal in Backticks setzt die Werte in den Satz ein: `${km} km = ${miles} mi`. Jedes ${…} kann einen beliebigen Ausdruck enthalten.

Quellen

Zuletzt geprüft am 30. September 2026