JavaScript für Ungeduldige. Cay Horstmann
Чтение книги онлайн.
Читать онлайн книгу JavaScript für Ungeduldige - Cay Horstmann страница 17

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
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 anderen Anweisungen angezeigt wird.
Für Ihre eigenen Experimente in der REPL ist es wichtig zu wissen, wie Sie die Ausgaben interpretieren müssen. Geben Sie beispielsweise die folgende Ausdrucksanweisung ein und schauen Sie sich die Antwort an:
console.log(6 * 7);
42
undefined
Die erste Zeile der Ausgabe ist der Seiteneffekt des Aufrufs von console.log, die zweite ist der Rückgabewert des Methodenaufrufs. Wie bereits erwähnt, gibt console.log den Wert undefined zurück.
2.2Semikolonergänzung
In JavaScript müssen bestimmte Anweisungen mit einem Semikolon abgeschlossen werden, vor allem Variablendeklarationen, Ausdrucksanweisungen und nichtlineare Steueranweisungen (break, continue, return und throw). Allerdings ergänzt JavaScript die erforderlichen Semikolons für Sie.
Die Grundregel dafür ist einfach: Bei der Verarbeitung einer Anweisung nimmt der Parser jedes Token darin auf, bis er auf ein Semikolon oder ein ungültiges Token stößt, also eines, das nicht als Teil der Anweisung gedeutet werden kann. Geht diesem ungültigen Token ein Zeilentrennzeichen voraus, handelt es sich also um eine schließende geschweifte Klammer oder um das Ende der Eingabe, dann fügt der Parser ein Semikolon hinzu.
Betrachten Sie dazu das folgende Beispiel:
let a = x
+ someComplicatedFunctionCall()
let b = y
Hinter der ersten Zeile wird kein Semikolon ergänzt, denn das Token + am Anfang der zweiten Zeile ist nicht ungültig.
Dagegen