Скачать книгу

Setzt first auf 42 und second auf 0, da es auf der rechten Seite kein

      // übereinstimmendes Element gibt

      let { nickname = 'None' } = harry

      // Setzt nickname auf 'None', da harry nicht über die Eigenschaft nickname

      // verfügt

      Ausdrücke für Standardwerte können auch die zuvor festgelegten Variablen enthalten:

      let { name, nickname = name } = harry

      // Sowohl name als auch nickname werden auf harry.name gesetzt

      Das folgende Beispiel zeigt eine typische Anwendung der Destrukturierung mit Standardwerten. Stellen Sie sich ein Objekt vor, das Angaben zur Verarbeitung enthält, also etwa Formatierungsanweisungen. Wenn darin eine bestimmte Eigenschaft nicht angegeben ist, soll dafür ein Standardwert verwendet werden:

      let config = { separator: '; ' }

      const { separator = ',', leftDelimiter = '[', rightDelimiter = ']' } = config

      Die Variable separator wird hier mit einem benutzerdefinierten Trennzeichen initialisiert. Da in der Konfiguration jedoch keine Begrenzungszeichen angegeben sind, werden die Standardzeichen für diesen Zweck verwendet. Mit der Destrukturierungssyntax fällt der Code viel knapper aus, als wenn Sie jede Eigenschaft einzeln nachschlagen, prüfen, ob sie definiert ist, und ggf. einen Standardwert dafür vorgeben.

      In Kapitel 3 sehen wir uns eine ähnliche Anwendung der Destrukturierung für Funktionsparameter an.

       1.18Übungen

      1 Was geschieht jeweils, wenn Sie 0 zu den Werten NaN, Infinity, false, true, null und undefined addieren? Was geschieht jeweils, wenn Sie einen leeren String mit NaN, Infinity, false, true, null und undefined verketten? Raten Sie zuerst und probieren Sie es dann aus.

      2 Was ergibt [] + [], {} + [], [] + {}, {} + {} und [] - {}? Werten Sie diese Ausdrücke einmal an der Befehlszeile aus und weisen Sie sie einmal einer Variablen zu. Vergleichen Sie die Ergebnisse und erklären Sie das Ergebnis.

      3 Wie in Java und C++ (aber anders als in Python, das sich auf viele Jahrhunderte mathematischer Erfahrung stützt) wird n % 2 zu -1 ausgewertet, wenn n ein negativer Integer ist. Untersuchen Sie das Verhalten des Operators % für negative Operanden. Berücksichtigen Sie dabei sowohl Integer als auch Fließkommazahlen.

      4 Nehmen wir an, angle sei ein Winkel in Grad, der nach der Addition oder Subtraktion anderer Winkel einen willkürlichen Wert angenommen hat. Wie können Sie diesen Winkel mithilfe des Operators % normalisieren, sodass er in den Bereich von 0 (einschließlich) bis 360 (ausschließlich) fällt?

      5 Nennen Sie so viele verschiedene Möglichkeiten, wie Ihnen einfallen, um in JavaScript einen String mit zwei Backslashs (also \\) zu erzeugen. Nutzen Sie dazu die in diesem Kapitel beschriebenen Mechanismen.

      6 Nennen Sie so viele verschiedene Möglichkeiten, wie Ihnen einfallen, um in JavaScript einen String mit dem einzelnen Zeichen zu erzeugen.

      7 Nennen Sie ein realistisches Beispiel für einen Template-String mit einem eingebetteten Ausdruck, der einen weiteren Template-String mit einem eingebetteten Ausdruck enthält.

      8 Nennen Sie drei Möglichkeiten, um ein Array mit einer Lücke in der Folge der Indizes zu erzeugen.

      9 Deklarieren Sie ein Array mit Elementen an den Indexpositionen 0, 0.5, 1, 1.5 und 2.

      10 Was geschieht, wenn Sie ein Array aus Arrays in einen String umwandeln?

      11 Erstellen Sie zwei Objekte für zwei Personen und speichern Sie sie in den Variablen harry und sally. Fügen Sie jeder Person die Eigenschaft friends hinzu, die ein Array mit ihren besten Freunden enthält. Dabei soll harry ein Freund von sally sein und sally eine Freundin von harry. Was geschieht, wenn Sie die Objekte protokollieren? Was geschieht, wenn Sie JSON.stringify aufrufen?

       2

       Steuerstrukturen

image

      In diesem Kapitel lernen Sie die Steuerstrukturen von JavaScript kennen, nämlich Verzweigungen, Schleifen und das Abfangen von Exceptions. Außerdem erhalten Sie hier einen Überblick über JavaScript-Anweisungen und eine Beschreibung der automatischen Semikolonergänzung.

       2.1Ausdrücke und Anweisungen

      Ebenso wie in Java und C++ wird in JavaScript zwischen Ausdrücken und Anweisungen unterschieden. Ein Ausdruck hat einen Wert. Beispielsweise ist 6 * 7 ein Ausdruck mit dem Wert 42. Auch Methodenaufrufe wie Math.max(6, 7) sind Ausdrücke.

      Anweisungen dagegen haben niemals einen Wert, sondern werden ausgeführt, um eine bestimmte Auswirkung zu erzielen. Betrachten Sie dazu das folgende Beispiel:

      let number = 6 * 7;

      Dies ist eine Anweisung, und ihre Auswirkung besteht darin, dass die Variable numer deklariert und initialisiert wird. Eine Anweisung dieser Art wird als Variablendeklaration bezeichnet. Andere gebräuchliche Arten von Anweisungen sind Verzweigungen und Schleifen, mit denen wir uns weiter hinten in diesem Kapitel beschäftigen werden.

      Die einfachste Form einer Anweisung ist die Ausdrucksanweisung, die lediglich aus einem Ausdruck gefolgt von einem Semikolon besteht:

      console.log(6 * 7);

      Der Ausdruck console.log(6 * 7) hat einen Seiteneffekt: Er zeigt 42 in der Konsole an. Außerdem hat er einen Wert, der allerdings undefined lautet, da die Methode console.log nichts Interessanteres zurückgibt. Aber selbst wenn dieser Ausdruck einen interessanteren Wert hätte, würde das keine Rolle spielen, denn der Wert einer Ausdrucksanweisung wird verworfen.

      Eine Ausdrucksanweisung ist daher nur für Ausdrücke sinnvoll, die einen Seiteneffekt haben. Die folgende Ausdrucksanweisung ist zwar gültiges JavaScript, hat aber keine Auswirkungen auf das Programm:

      6 * 7;

      Es ist gut, zwischen Ausdrücken und Anweisungen unterscheiden zu können, allerdings ist es in JavaScript etwas knifflig, den Unterschied zwischen einem Ausdruck und einer Ausdrucksanweisung zu erkennen. Wie Sie im nächsten Abschnitt sehen werden, wird automatisch ein Semikolon ergänzt, wenn Sie in eine Zeile nur einen einzelnen Ausdruck schreiben, was daraus eine Anweisung macht. Daher ist es in der JavaScript-Konsole des Browsers und in Node.js nicht möglich, einen Ausdruck zu untersuchen.

      Wenn Sie beispielsweise 6 * 7 eingeben, wird der Wert dieses Ausdrucks angezeigt:

      6 * 7

       42

      Das macht eine REPL (Read-Eval-Print Loop): Sie liest einen Ausdruck, wertet ihn aus und gibt den Wert aus.

      Aufgrund der automatischen Semikolonergänzung sieht die JavaScript-REPL in Wirklichkeit jedoch die folgende Anweisung:

      6 * 7;

      Anweisungen haben keine Werte, aber die JavaScript-REPL zeigt trotzdem Werte für sie an.

      Geben Sie nun die folgende Variablendeklaration ein:

      let number = 6 * 7;

       undefined

      Bei der Ausdrucksanweisung hat die REPL den Wert des Ausdrucks angezeigt, bei der Variablendeklaration dagegen undefined. In Übung 1 werden Sie sich damit beschäftigen, was bei

Скачать книгу