Lernziele
- Sie können in JavaScript Variablen mit
letundconstdeklarieren.- Sie können
if,else ifundelsefür Fallunterscheidungen verwenden.- Sie können
prompt()undalert()für einfache Ein- und Ausgabe nutzen.- Sie können
Math.random()einsetzen, um Zufallszahlen zu erzeugen.- Sie kennen Template Literals und können Variablen elegant in Strings einbauen.
In der letzten Lektion haben wir gelernt, wie man HTML-Elemente findet und verändert. Jetzt geben wir der Webseite richtige Logik — sie soll Entscheidungen treffen können.
Variablen mit let und const
In JavaScript deklariert man Variablen mit let (für veränderbare Werte) oder const (für konstante Werte, die nie überschrieben werden).
Was ist mitvar?In altem JavaScript-Code sehen Sie oft
varstattlet.varfunktioniert ähnlich, hat aber einige Eigenheiten, die zu schwer auffindbaren Bugs führen können. Heute gilt:letundconstverwenden,varnicht mehr neu schreiben. Wenn Sie altes Beispiele sehen, können Sievarmental durchletersetzen.
Fallunterscheidungen mit if ... else
Die Syntax in JavaScript ist fast identisch zu Python — aber mit geschweiften Klammern statt Einzügen, und mit runden Klammern um die Bedingung.
Die Vergleichsoperatoren sind wie in Python:
| Operator | Bedeutung |
|---|---|
== | gleich (locker) |
=== | gleich (streng — empfohlen) |
!= | ungleich (locker) |
!== | ungleich (streng) |
<, >, <=, >= | Vergleiche |
&& | und |
|| | oder |
! | nicht |
Immer===und!==verwendenDer Unterschied zwischen
==und===ist subtil aber wichtig.==versucht, Werte zu konvertieren, bevor es vergleicht — z.B. ist"5" == 5true.===vergleicht ohne Konvertierung —"5" === 5ist false. Gewöhnen Sie sich===an, das vermeidet überraschende Bugs.
Eingabe und Ausgabe mit prompt() und alert()
Für einfache Spielereien kann man Nutzereingaben direkt mit prompt() abfragen — ein kleines Fensterchen springt auf:
prompt() gibt immer einen String zurück, auch wenn die Person eine Zahl eingibt. Das ist wichtig, sobald Sie rechnen wollen — dann müssen Sie mit Number() oder parseInt() umwandeln.
Template Literals — eleganter als String-Konkatenation
Strings mit + zusammenzufügen wird schnell unübersichtlich. JavaScript hat dafür Template Literals mit Backticks `:
Backticks ` finden Sie auf der Schweizer Tastatur über Shift + ´ (rechts neben dem ß auf deutschen Tastaturen, bzw. rechts neben dem ' auf Schweizer Tastaturen — manchmal muss man danach noch Leertaste drücken).
Zufallszahlen mit Math.random()
Math.random() gibt eine Zufallszahl zwischen 0 (inklusiv) und 1 (exklusiv).
Um eine Zufallszahl zwischen 1 und 100 zu bekommen:
let zahl = Math.round(Math.random() * 100);
Math.random() * 100ergibt eine Kommazahl zwischen 0 und 99.999...Math.round(...)rundet auf eine ganze Zahl.
Wenn Sie Zahlen zwischen 1 und 6 brauchen (Würfelwurf):
let wurf = Math.floor(Math.random() * 6) + 1;
Übung: Zahlenrate-Spiel mit dem Piratenkapitän 🏴☠️
Sie sind eines Abends in einer schönen Bucht vor Anker, als plötzlich eine Horde Piraten den Strand stürmt. Der einäugige Piratenkapitän Rotbart ist allerdings ein Spieler. Geistesgegenwärtig schlagen Sie ihm einen Deal vor: Wenn er sich eine Zahl zwischen 1 und 100 ausdenkt und Sie sie erraten können, dürfen Sie Ihr Geld behalten.
Hier eine erste, einfache Version:
Sie sind dran!Erweitern Sie das Spiel:
- Geben Sie dem Piratenkapitän mehrere verschiedene Beleidigungen, die zufällig ausgewählt werden — je nach dem, ob die geratene Zahl zu hoch oder zu tief ist.
- Nach 5 Versuchen verliert der Spieler. Zeigen Sie eine entsprechende Nachricht.
- Nach einem Sieg oder einer Niederlage soll das Spiel von vorne beginnen können.
Mögliche Lösung mit zufälligen Beleidigungen<h2>Harhar, errate die Zahl oder ich klau dir all dein Geld!</h2> <input type="number" id="versuch" placeholder="1 bis 100"> <button onclick="rate()">Rate</button> <button onclick="neustart()">Neues Spiel</button> <p id="antwort"></p> <p id="versuche">Versuche: 0 / 5</p> <script> const insultsLow = [ "Ha! Zu niedrig! Versuchs nochmal, du Landei!", "So tief wie du ratest, sinken nicht mal die Schiffe, die ich gekapert habe!", "Hahaha! Viel zu tief! Du würdest nicht mal einen Schatz auf einer einsamen Insel finden!", "So tief wie du schätzt, da tut mir ja der Holzfuss weh!" ]; const insultsHigh = [ "So hoch? Du könntest genauso gut nach fliegenden Delfinen Ausschau halten!", "Wow! Da fällt mir fast der Bart ab. Viel zu hoch!", "Sag mal, willst du dein Geld gar nicht mehr? So hoch schätzt nicht mal mein Papagei!", "Du würdest doch nicht einmal den Treffpunkt am HB finden, du Möchtegern!" ]; let geheimzahl, versuche; function neustart() { geheimzahl = Math.round(Math.random() * 100); versuche = 0; document.getElementById("antwort").textContent = ""; document.getElementById("versuche").textContent = "Versuche: 0 / 5"; } neustart(); function zufaelligeBeleidigung(liste) { const index = Math.floor(Math.random() * liste.length); return liste[index]; } function rate() { const eingabe = Number(document.getElementById("versuch").value); versuche = versuche + 1; let nachricht; if (eingabe === geheimzahl) { nachricht = `Verflucht! Du hast es in ${versuche} Versuchen geschafft.`; } else if (versuche >= 5) { nachricht = `Aus! Die Zahl war ${geheimzahl}. Her mit deinem Gold!`; } else if (eingabe < geheimzahl) { nachricht = zufaelligeBeleidigung(insultsLow); } else { nachricht = zufaelligeBeleidigung(insultsHigh); } document.getElementById("antwort").textContent = nachricht; document.getElementById("versuche").textContent = `Versuche: ${versuche} / 5`; } </script>
Pfeil-Funktionen — eine kürzere Schreibweise
In modernem JavaScript-Code sehen Sie häufig Arrow Functions (Pfeil-Funktionen). Sie sind eine kompaktere Schreibweise für Funktionen.
// Klassische Funktion
function verdoppeln(x) {
return x * 2;
}
// Arrow Function — gleichbedeutend
const verdoppeln = (x) => x * 2;
Sie müssen das nicht selbst schreiben können. Aber wenn Sie online Beispiele lesen, hilft es zu erkennen: () => ist einfach eine Funktion.
Zusammenfassung
ZusammenfassungVariablen
let alter = 16; // veränderbar const pi = 3.14159; // konstantFallunterscheidungen
if (bedingung) { // Code } else if (andere) { // Code } else { // Code }Template Literals
const text = `Hallo ${name}!`;Zufallszahlen
Math.round(Math.random() * 100); // 0 bis 100 Math.floor(Math.random() * 6) + 1; // 1 bis 6 (Würfelwurf)Ein-/Ausgabe
let name = prompt("Wie heisst du?"); alert("Hallo " + name);