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 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 Funktionkonvertierst zu
Number(value)Zahl
parseInt(value)Ganzzahl
parseFloat(value)Fließkommazahl
Boolean(value)Wahrheitswert
String(value)Zeichenkette