JavaScript – Das Handbuch für die Praxis. David Flanagan

Читать онлайн.
Название JavaScript – Das Handbuch für die Praxis
Автор произведения David Flanagan
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9783960104926



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

interpretiert ihn folgendermaßen:

      let a; a = 3; console.log(a);

      JavaScript behandelt den ersten Zeilenumbruch als Semikolon, weil es den Code let a a ohne Semikolon nicht parsen kann. Das zweite a könnte allerdings auch als eigenständige Anweisung a; interpretiert werden. JavaScript behandelt den zweiten Zeilenumbruch jedoch nicht als Semikolon, weil es die längere Anweisung a = 3; weiter parsen kann.

      Diese Regeln, anhand deren das Ende von Anweisungen erkannt wird, können zu einigen überraschenden Situationen führen. Folgender Code scheint aus zwei eigenständigen Anweisungen zu bestehen, die durch einen Zeilenumbruch getrennt werden:

      let y = x + f

      (a+b).toString()

      Die Klammern zu Beginn der zweiten Zeile können aber auch als ein Funktionsaufruf auf dem f-Element der ersten Zeile interpretiert werden, sodass JavaScript den Code folgendermaßen lesen würde:

      let y = x + f(a+b).toString();

      Es ist ziemlich unwahrscheinlich, dass eine solche Interpretation beabsichtigt ist. Hier ist also explizit ein Semikolon erforderlich, damit die Anweisungen tatsächlich separat behandelt werden.

      Allgemein kann man sagen: Wenn eine Anweisung mit (, [, /, + oder - beginnt, besteht die Möglichkeit, dass sie als Fortsetzung der vorherigen Anweisung interpretiert wird. Anweisungen, die mit /, + oder - beginnen, sind in der Praxis recht selten, aber Anweisungen, die mit ( und [ beginnen, sind – zumindest in einigen JavaScript-Programmierstilen – keineswegs ungewöhnlich. Manche Programmierer stellen derartigen Anweisungen zur Sicherheit ein Semikolon voran, damit der Code auch dann noch korrekt funktioniert, wenn die vorhergehende Anweisung abgeändert und ein eventuell zuvor vorhandenes abschließendes Semikolon entfernt wird:

      let x = 0 // Semikolon hier weggelassen.

      ;[x,x+1,x+2].forEach(console.log) // Ein "defensives" Semikolon sorgt für

      // die sichere Trennung der Anweisungen.

      Es gibt drei Ausnahmen von der allgemeinen Regel, dass JavaScript Zeilenumbrüche als Semikolon interpretiert, wenn es die zweite Zeile nicht als Fortsetzung der Anweisung der ersten Zeile parsen kann. Die erste Ausnahme betrifft die Anweisungen return, throw, yield, break und continue (siehe Kapitel 5). Diese Anweisungen stehen häufig allein, manchmal aber folgt auf sie ein Identifier oder Ausdruck. Folgt nach einem dieser Wörter (vor irgendwelchen weiteren Tokens) ein Zeilenumbruch, interpretiert JavaScript diesen Zeilenumbruch immer als Semikolon. Schreiben Sie beispielsweise

      return

      true;

      geht JavaScript davon aus, dass Sie Folgendes meinen:

      return; true;

      Wahrscheinlich haben Sie aber eher dies im Sinn gehabt:

      return true;

      Das bedeutet, dass Sie keinen Zeilenumbruch zwischen return, break oder continue und dem Ausdruck einfügen dürfen, der dem Schlüsselwort folgt. Machen Sie es trotzdem, wird die Ausführung Ihres Codes vermutlich fehlschlagen – und zwar auf eine Weise, die nur schwer zu durchschauen oder zu debuggen ist.

      Die zweite Ausnahme betrifft die Operatoren ++ und -- (siehe 4.8). Diese Operatoren können als Präfixoperatoren vor oder als Postfixoperatoren nach einem Ausdruck eingesetzt werden. Möchten Sie einen dieser Operatoren als Postfixoperator benutzen, muss er in der gleichen Zeile stehen wie der Ausdruck, auf den er angewandt werden soll. Die dritte Ausnahme betrifft Funktionen, die mit der kompakten Pfeilnotation definiert sind: Der =>-Pfeil selbst muss in derselben Zeile wie die Parameterliste stehen.

       2.7Zusammenfassung

      In diesem Kapitel haben wir uns damit beschäftigt, wie die Syntax von JavaScript-Programmen auf der untersten lexikalischen Ebene aussieht. Das nächste Kapitel führt uns einen Schritt weiter und stellt die primitiven Datentypen und Werte (Zahlen, Zeichenketten usw.) vor, die als grundlegende Recheneinheiten für JavaScript-Programme dienen.

       KAPITEL 3

       Typen, Werte und Variablen

      Computerprogramme arbeiten, indem sie Werte wie etwa die Zahl 3,14 oder den Text »Hallo Welt.« manipulieren. Die unterschiedlichen Arten von Werten, die in einer Programmiersprache repräsentiert und manipuliert werden können, bezeichnet man als Datentypen (oder kurz Typen), und der Satz unterstützter Datentypen ist eines der grundlegendsten Kennzeichen einer Programmiersprache. Wenn ein Programm einen Wert zur späteren Verwendung aufbewahren muss, weist es den Wert einer Variablen zu (oder »speichert« ihn in einer solchen). Variablen haben Namen, die wir in unseren Programmen verwenden, um auf Werte zu verweisen. Ein weiteres grundlegendes Kennzeichen einer Programmiersprache ist die Art und Weise, in der Variablen funktionieren. Dieses Kapitel erklärt Typen, Werte und Variablen in JavaScript. Es beginnt mit einem Überblick und einigen Definitionen.

       3.1Übersicht und Definitionen

      JavaScript-Datentypen lassen sich in zwei Kategorien unterteilen: primitive Typen und Objekttypen. Zu den primitiven Datentypen von JavaScript zählen Zahlen, Strings (im Deutschen auch oft Zeichenfolgen oder Zeichenketten genannt) und boolesche Wahrheitswerte. Ein wesentlicher Teil dieses Kapitels ist einer detaillierten Erklärung der numerischen (siehe 3.2) und String-Typen (siehe 3.3) in JavaScript gewidmet. Booleans werden in 3.4 behandelt.

      Die speziellen JavaScript-Werte null und undefined sind primitive Werte, aber weder Zahlen noch Strings noch boolesche Werte. Beide werden in der Regel als einzige Mitglieder ihres jeweils eigenen speziellen Typs betrachtet. In 3.5 erfahren Sie mehr über null und undefined. In ES6 ist ein neuer spezieller Typ – das Symbol – hinzugekommen, mit dessen Hilfe Spracherweiterungen definiert werden können, ohne die Rückwärtskompatibilität zu beeinträchtigen. Symbole werden kurz in 3.6 behandelt.

      Jeder JavaScript-Wert, der keine Zahl, kein String, kein boolescher Wert, kein Symbol, nicht null und nicht undefined ist, ist ein Objekt. Ein Objekt (das heißt ein Exemplar des Typs Object) ist eine Sammlung von Eigenschaften, die jeweils einen Namen und einen Wert haben (entweder einen primitiven Wert oder ein anderes Objekt). Ein ganz besonderes Objekt, das globale Objekt, wird in 3.7 behandelt. Eine übergreifendere und ausführlichere Behandlung von Objekten im Allgemeinen finden Sie in Kapitel 6.

      Ein normales JavaScript-Objekt ist nichts anderes als eine ungeordnete Sammlung benannter Werte. In JavaScript gibt es außerdem eine spezielle Art von Objekt, das als Array bezeichnet wird. Ein Array ist eine geordnete Sammlung nummerierter Werte. Für die Arbeit mit Arrays – die einige spezielle Verhaltensweisen besitzen, die sie von gewöhnlichen Objekten unterscheiden – bietet JavaScript eine besondere Syntax. Arrays werden detailliert in Kapitel 7 behandelt.

      Neben grundlegenden Objekten und Arrays definiert JavaScript eine Reihe weiterer nützlicher Objekttypen. Ein Set-Objekt stellt einen Satz von Werten dar, ein Map-Objekt dagegen stellt eine Zuordnung von Schlüsseln zu Werten dar. Verschiedene typisierte Arrays