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 ein
let alter = prompt("Wie alt bist du?");
console.log(alter); // "5" (als String)
console.log(typeof alter); // "string"
// Problematische Berechnungen
let inZehnJahren = alter + 10;
console.log(inZehnJahren); // "510" (Stringverkettung statt Addition!)
// Weitere unerwartete Ergebnisse
console.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 Umwandlung
let alter = Number(prompt("Wie alt bist du?"));
console.log(alter); // 5 (als Number)
console.log(typeof alter); // "number"
// Jetzt funktionieren Berechnungen korrekt
let inZehnJahren = alter + 10;
console.log(inZehnJahren); // 15 (mathematische Addition)
// Auch Vergleiche funktionieren wie erwartet
console.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" ein
let 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 Nachkommastellen
let 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 Funktion | konvertierst zu |
Number(value) | Zahl |
parseInt(value) | Ganzzahl |
parseFloat(value) | Fließkommazahl |
Boolean(value) | Wahrheitswert |
String(value) | Zeichenkette |