Mathematische Operatoren und das „Math“-Objekt
Funktionen
Ausblick auf das DOM (Teil 1 von 2)

JavaScript: Explizite Typkonvertierung

Um Überraschungen zu vermeiden, kannst du Typen auch explizit umwandeln:

// Zu Number konvertieren
console.log(Number("5")); // 5
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number("")); // 0
console.log(Number("Hallo")); // NaN

// Zu String konvertieren
console.log(String(5)); // "5"
console.log(String(true)); // "true"
console.log(String(null)); // "null"

// Zu Boolean konvertieren
console.log(Boolean(1)); // true
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean("Hallo")); // true

Häufige Fallstricke und Lösungen

Unerwartete Stringverkettung

// Problem
let a = 5;
let b = "3";
console.log(a + b); // "53" (unerwartete Stringverkettung)

// Lösung
console.log(a + Number(b)); // 8

Zahlen in Formularen

// Problem: Formulareingaben sind immer Strings
let eingabe = „5“;
let verdoppelt = eingabe * 2; // 10 (implizite Konvertierung)
let verkettung = eingabe + 2; // „52“ (Vorsicht!)

// Lösung
let sicheresAddieren = Number(eingabe) + 2; // 7

Typkonvertierung bei window.prompt

Der Fallstrick bei prompt-Eingaben

Die window.prompt-Funktion ist ein klassischer Fallstrick bei der Typkonvertierung in JavaScript. Sie gibt immer einen String zurück – selbst wenn der Benutzer eine Zahl eingibt. Dieser versteckte Umstand führt oft zu unerwarteten Ergebnissen.


// Benutzer gibt die Zahl 5 einlet alter = prompt("Wie alt bist du?"); console.log(alter);        // "5" (als String)console.log(typeof alter); // "string"// Problematische Berechnungenlet inZehnJahren = alter + 10;console.log(inZehnJahren);  // "510" (Stringverkettung statt Addition!)// Weitere unerwartete Ergebnisseconsole.log(alter > 18);    // false (Stringvergleich: "5" kommt alphabetisch vor "18")console.log(alter == 5);    // true (durch implizite Konvertierung)console.log(alter === 5);   // false (unterschiedliche Typen)

Die Lösung: Explizite Typkonvertierung

Um dieses Problem zu umgehen, wandle die Eingabe sofort in eine Zahl um:


// Direkte Umwandlunglet alter = Number(prompt("Wie alt bist du?"));console.log(alter);         // 5 (als Number)console.log(typeof alter);  // "number"// Jetzt funktionieren Berechnungen korrektlet inZehnJahren = alter + 10;console.log(inZehnJahren);  // 15 (mathematische Addition)// Auch Vergleiche funktionieren wie erwartetconsole.log(alter > 18);    // false (numerischer Vergleich)console.log(alter === 5);   // true (gleicher Typ und Wert)

Umgang mit ungültigen Eingaben

Ein zusätzliches Problem: Wenn der Benutzer keine Zahl eingibt, erhältst du NaN (Not a Number):


// Benutzer gibt "zwanzig" einlet alter = Number(prompt("Wie alt bist du?"));console.log(alter);  // NaN

Eine robuste Lösung prüft daher die Gültigkeit der Eingabe. Dies werden wir später ausführlich mit den Vergleichsoperatoren machen.

Alternativen für verschiedene Zahlenformate

Je nach Anwendungsfall brauchst du unterschiedliche Konvertierungsmethoden:


// Ganzzahlen (ohne Nachkommastellen)let ganzzahl = parseInt(prompt("Gib eine Ganzzahl ein:"));// Zahlen mit Nachkommastellenlet dezimalzahl = parseFloat(prompt("Gib eine Dezimalzahl ein:"));// Umwandlung mit angegebener Basis (z.B. für Hexadezimal)let binärZahl = parseInt(prompt("Gib eine Binärzahl ein:"), 2);console.log(binärZahl); // Wandelt z.B. "1010" in die Dezimalzahl 10 um

Merke dir: Bei prompt ist die explizite Typkonvertierung nicht optional, sondern notwendig. Ohne sie programmierst du an der Absicht des Benutzers vorbei und schaffst schwer zu findende Fehler!

TL;DR

In diesem Kapitel hast du kennegelernt, dass du mit:

der Funktionkonvertierst zu
Number(value)Zahl
parseInt(value)Ganzzahl
parseFloat(value)Fließkommazahl
Boolean(value)Wahrheitswert
String(value)Zeichenkette