6. Unterrichtsblock

JavaScript Switch

Die switch-Anweisung wird verwendet, um verschiedene Aktionen basierend auf verschiedenen Bedingungen auszuführen.

Unterschied zu if – else

Die switch-Anweisung kann gegen bedingte Anweisungen mit if / else ausgetauscht werden. Wenn mehr als zwei oder drei Alternativen bestehen, ist die switch-Anweisung einfacher in der Handhabung und auch effizienter, da sie die Bedingung nicht für jede Option testen muss.

Anwendung

Verwendet wird die switch-Anweisung, um einen von vielen auszuführenden Codeblöcken auszuwählen.

// SYNTAX
switch(expression) {
  case x:
    // Code block
    break;
  case y:
    // Code Block
    break;
  default:
    // Code Block
} 

So funktioniert es:

  • Die switch-Expression wird einmal ausgewertet.
  • Der Wert der Espression wird mit den Werten jedes Falls (case) verglichen.
  • Wenn es eine Übereinstimmung gibt, wird der zugehörige Codeblock ausgeführt.
  • Wenn es keine Übereinstimmung gibt, wird der Standardcodeblock (default) ausgeführt.

Beispiel:

Die Methode getDay() gibt den Wochentag als Zahl zwischen 0 und 6 zurück. (Sonntag=0, Montag=1, Dienstag=2 ..)

Dieses Beispiel verwendet die Wochentagsnummer, um den Wochentagsnamen zu berechnen:

switch (new Date().getDay()) {
  case 0:
    tag = "Sonntag";
    break;
  case 1:
    tag = "Montag";
    break;
  case 2:
     tag = "Dienstag";
    break;
  case 3:
    tag = "Mittwoch";
    break;
  case 4:
    tag = "Donnerstag";
    break;
  case 5:
    tag = "Freitag";
    break;
  case 6:
    tag = "Samstag";
}

Ergebnis:

Das break-Schlüsselwort

Wenn JavaScript ein break-Schlüsselwort erreicht, bricht es aus dem aktuellen switch-Block aus. Dadurch wird die Ausführung innerhalb des switch-Blocks gestoppt.

Es ist nicht erforderlich, den letzten Fall in einem switch-Block zu unterbrechen. Dort bricht (endet) der Block sowieso.

Hinweis: Wenn die break-Anweisung weggelassen wird, wird der nächste Fall ausgeführt, auch wenn die Auswertung nicht mit dem Fall übereinstimmt.

Aufgabe

Baue den Code aus dem oben gezeigten Beispiel mit der Tagesanzeige um. Die Anzeige des heutigen Tages soll erscheinen, wenn mit der Maus über ein rot ausgefülltes <div> Element gefahren wird. Die Namen der Tage sollen dabei in einem Array gespeichert sein und auch aus dem Array geladen werden.

Das default-Schlüsselwort

Das default-Schlüsselwort gibt den Code an, der ausgeführt werden soll, wenn keiner der vorhandenen Fälle zutrifft:

switch (new Date().getDay()) {
  case 5:
    text = "Heute ist Freitag &#127867;";
    break;
  case 6:
    text = "Heute ist Samstag &#129395;";
    break;
  case 0:
    text = "Heute ist Sonntag &#128564;";
    break;
  default:
    text = "Warte auf Wochenende &#128557;";
}

Status:

Merke: Der default-Block muss nicht zwingend der letzte Block in der Kette von Fällen sein. Wenn er der default-Block jedoch nicht der letzte Block ist, muss er mit einem break beendet werden.

Gemeinsame Blöcke

Manchmal möchte man, dass verschiedene switch-Fälle denselben Code verwenden. In diesem Beispiel teilen sich 3 und 4 denselben Codeblock und 0, 6 und 5 teilen sich einen anderen Codeblock:

switch (new Date().getDay()) {
  default:
    text = "Warte auf Wochenende &#128557;";  
    break;
  case 3:
  case 4:
    text = "Bald ist Wochenende";
    break;
  case 0:
  case 6:
  case 5:
    text = "Hoch die Hände - Wochenende! &#129395;";
}

Reihenfolge in der Verarbeitung

  • Wenn mehrere Fälle mit einem Fallwert übereinstimmen, wird der erste Fall ausgewählt.
  • Wenn keine übereinstimmenden Fälle gefunden werden, fährt das Programm mit dem default-Block fort.
  • Wenn kein default-Wert gefunden wird, fährt das Programm mit der/den Anweisung(en) nach switch fort.

Strikter Vergleich

switch-Fälle verwenden den strikten Vergleich (===). Die Werte müssen vom gleichen Typ sein, um übereinstimmen zu können. Ein strenger Vergleich kann nur true sein, wenn die Operanden vom gleichen Typ sind. In diesem Beispiel gibt es keine Übereinstimmung für x:

let x = "0";
switch (x) {
  case 0:
    text = "Aus";
    break;
  case 1:
    text = "An";
    break;
  default:
    text = "Kein Wert verfügbar";
} 

Aufgabe

Probiere o.g. Code aus, um ein Gefühl für die Anweisungen zu bekommen.

JavaScript Math-Objekt

Mit dem JavaScript-Math-Objekt können mathematische Aufgaben mit Zahlen ausgeführt werden.

// SYNTAX
Math.property;

// Beispiel:
Math.PI;

Ausgabe:

Anwendung

Im Gegensatz zu anderen Objekten hat das Math-Objekt keinen Konstruktor. Das Math-Objekt ist statisch. Alle Methoden und Eigenschaften können verwendet werden, ohne zuerst ein Math-Objekt zu erstellen.

Math-Eigenschaften (Konstanten)

JavaScript bietet 8 mathematische Konstanten, auf die als mathematische Eigenschaften zugegriffen werden kann:

Math.E        // gibt die Eulersche Zahl aus
Math.PI       // gibt PI aus
Math.SQRT2    // gibt die Quadratwurzel von 2 aus
Math.SQRT1_2  // gibt die Quadratwurzel von 1/2 aus
Math.LN2      // gibt den natürlichen Logarithmus von 2 aus
Math.LN10     // gibt den natürlichen Logarithmus von 10 aus
Math.LOG2E    // gibt den Logarithmus zur Basis 2 von E zurück
Math.LOG10E   // gibt den Logarithmus zur Basis 10 von E zurück

Math-Methoden

// SYNTAX
Math.methode(nummer);

// Beispiel:
Math.round(3.141592653589793);
Math.round();

// Funktion zum Runden auf 2 Nachkommazahlen:
function rundeAufZwei(zahl) {
    return +(Math.round(zahl + "e+2")  + "e-2");
}
document.getElementById("demo4").innerHTML = rundeAufZwei(3.006);
MethodeBeschreibung
abs(x)Gibt den absoluten Wert von x zurück
acos(x)Gibt den Arkuskosinus von x im Bogenmaß (Radiant) zurück
acosh(x)Gibt den hyperbolischen Arkuskosinus von x zurück
asin(x)Gibt den Arkussinus von x im Bogenmaß (Radiant) zurück
asinh(x)Gibt den hyperbolischen Arkussinus von x zurück
atan(x)Gibt den Arkustangens von x als numerischen Wert zwischen -PI/2 und PI/2 Bogenmaß zurück
atan2(y, x)Gibt den Arkustangens des Quotienten seiner Argumente zurück
atanh(x)Gibt den hyperbolischen Arkustangens von x zurück
cbrt(x)Gibt die Kubikwurzel von x zurück
ceil(x)Gibt x zurück, aufgerundet auf die nächste Ganzzahl
cos(x)Gibt den Kosinus von x zurück (x ist im Bogenmaß)
cosh(x)Gibt den hyperbolischen Kosinus von x zurück
exp(x)Gibt den Wert von Ex aus
floor(x)Gibt x zurück, abgerundet auf die nächste Ganzzahl
log(x)Gibt den natürlichen Logarithmus (Basis E) von x zurück
max(x, y, z, …, n)Gibt die Zahl mit dem höchsten Wert zurück
min(x, y, z, …, n)Gibt die Zahl mit dem niedrigsten Wert zurück
pow(x, y)Gibt den Wert von x hoch y zurück
random()Gibt eine zufällige Zahl zwischen 0 und 1 aus
round(x)Rundet x auf die nächste ganze Zahl
sign(x)Gibt zurück, ob x negativ, null oder positiv ist (-1, 0, 1)
sin(x)Gibt den Sinus von x zurück (x ist im Bogenmaß)
sinh(x)Gibt den hyperbolischen Sinus von x zurück
sqrt(x)Gibt die Quadratwurzel von x zurück
tan(x)Gibt den Tangens eines Winkels zurück
tanh(x)Gibt den hyperbolischen Tangens einer Zahl zurück
trunc(x)Gibt den ganzzahligen Teil einer Zahl zurück (x)

Übungsaufgaben

  • Probiere ein paar der Math.Methoden aus, um ein Gefühl für diese zu erhalten.
  • Probiere auch das Runden von Zahlen mit der oben gezeigten Funktion aus.

Lösungen

6-unterricht.html