JavaScript: Syntax-Grundlagen

Notizen

siehe Weblog-Artikel: Geheimnisse der JavaScript-Syntax

Aufbau eines JavaScript-Programmes

Ein JavaScript-Programm ist nach gewissen wiederkehrenden Regeln aufgebaut. Solche Syntax-Regeln kennen Sie aus der natürlichen, zum Beispiel der deutschen Sprache. Wenn Ihr Gesprächspartner Sie verstehen soll, müssen Sie beim Formulieren eines Satzes gewisse Grundregeln der Syntax und Grammatik einhalten, damit Sie verstanden werden.

Glücklicherweise verstehen unsere Mitmenschen uns auch dann, wenn wir kleinere Fehler machen und uns nur grob an die Regeln halten. Programmiersprachen sind jedoch viel strenger: Zum einen sind ihre Regeln vergleichsweise einfach, eindeutig und lassen wenig Spielraum. Zum anderen müssen sich Programmierer an diese Regeln halten und dürfen keine Ausnahmen machen.

Dies hat folgende Bewandnis: Damit der JavaScript-Interpreter ein Programm ausführen kann, muss er zunächst dessen Syntax verstehen. Dieses Aufsplitten in die Bestandteile nennt sich Parsing. Wenn der Interpreter dabei auf einen Syntaxfehler trifft, bricht er mit einer Fehlermeldung ab und das JavaScript-Programm wird gar nicht erst ausgeführt.

Die folgende Beschreibung der JavaScript-Syntax ist sehr theoretisch und formal. Sie soll ihnen den groben Aufbau eines JavaScript-Programmes vermitteln, damit Sie wissen, welche Bestandteile an welchen Stellen vorkommen dürfen.

Anweisungen (Statements)

Vereinfachend gesagt besteht ein JavaScript-Programm aus einer Abfolge von einer oder mehreren Anweisungen, sogenannten Statements. Bei der Ausführung des JavaScripts werden die Anweisungen nacheinander abgearbeitet.

(Der Einfachheit halber rechnen wir die Funktionsdeklaration zu den Anweisungen, was der ECMAScript-Standard nicht tut. Aber Sonderfall der Funktionsdeklarationen, sie werden nicht in der Reihenfolge der anderen Anweisungen ausgeführt. Dasselbe bei Variablen-Deklarationen. TODO)

Variablen-Deklaration

Mit einer Variablen-Deklaration wird eine Variable im aktuellen Gültigkeitsbereich erzeugt, d.h. als globale Variable oder lokale Funktionsvariable. Sie kann entweder ohne Wert instantiiert werden:

var alter;

Oder der Anfangswert kann gleich angegeben werden:

var alter = 32;

Anstelle der 32 kann ein beliebiger Ausdruck stehen. Das Schema lautet also:

var Bezeichner = Ausdruck;

Kontrollstrukturen: Verzweigungen und Schleifen

Kontrollstrukturen sind Anweisungen, die wiederum Blöcke mit Anweisungen enthalten. Dadurch ist es möglich, die Ausführung der in den Blöcken enthaltenen Anweisungen entsprechend bestimmter Regeln zu kontrollieren.

Man unterscheidet grundsätzlich zwei Arten von Kontrollstrukturen: Verzweigungen und Schleifen. Mittels Verzweigungen ist es möglich, die Ausführung einer oder mehrer Anweisungs-Blöcke von Bedingungen abhängig zu machen. Schleifen ermöglichen, einen Anweisungs-Block wiederholt ausführen zu lassen.

Verzweigungen

Zu den Verzweigungen gehört die bedingte Anweisung, auch if-Anweisung genannt.

if (alter >= 18) {
   alert("Volljährig!");
} else {
   alert("Noch nicht volljährig.");
}

Zwischen den runden Klammern steht ein beliebiger Ausdruck, zwischen den geschweiften Klammern eine oder mehrere Anweisungen. Das allgemeine Schema lautet:

if (Ausdruck) {
   Anweisungen
} else {
   Anweisungen
}

Mit der switch-Anweisung lassen sich Verzweigungen notieren, bei denen ein Wert mit vielen anderen Werten verglichen wird und eine entsprechende Anweisung ausgeführt wird.

switch (alter) {
   case 10 :
      alert("zehn");
   case 20 :
      alert("zwanzig");
}

Schleifen

Ist zur Laufzeit die Anzahl der Wiederholungen bereits beim Eintritt in die Schleife bekannt, verwendet man häufig die for-Anweisung.

for (var i = 0; i < 5; i++) {
    alert("Sie müssen noch " + (5 - i) + " mal klicken.");
}

Beim Schleifeneintritt wird zunächst die Variable i deklariert und mit dem Wert 0 initialisiert. Anschließend wird der Anweisungs-Block so oft ausgeführt, bis der Wert von i die Zahl 4 übersteigt. Da i nach jedem Schleifendurchlauf um eins erhöht wird, wird die Schleife nach fünf Durchläufen verlassen.

Allgemein wird die Ausführung einer for-Anweisung von drei Teilen bestimmt. Einmal der Initialisierung, in obigem Beispiel var i = 0. Hier wird im normalen Gebrauch eine so genannte Schleifenvariable mit einem Startwert initialisiert. Im zweiten Teil, der Bedingung, wird eine Eigenschaft der Schleifenvariable geprüft. Als drittes wird in der Fortsetzung angegeben, was nach jedem Durchlauf mit der Schleifenvariable getan werden soll.

Ausdruck-Anweisung (Expression-Statement)

Die meisten Anweisungen sind sogenannte Ausdruck-Anweisungen. Sie bestehen lediglich aus einem Ausdruck, und ein Ausdruck kann sehr unterschiedlich aussehen.

window.print();
alter = 18;
objekt.nummer = 5;
objekt.nummer++;
meldung = alter >= 18 ? "volljährig" : "noch nicht volljährig";
1 + 1;

Eine Ausdruck-Anweisung sollte immer mit einem Semikolon abgeschlossen werden.

Weitere Statements

break, return, continue usw.

Ausdrücke (Expressions)

Ein Ausdruck besteht aus Bezeichnern und Literalen, die mit Operatoren verknüpft werden

alter = 18
element.appendChild(element2)
objekt.nummer++
alert("Vorname: " + vorname)

Operatoren

Ein, zwei oder drei Operanden. Die Operanden können selbst als Ausdrücke notiert sein.

Bezeichner (Identifier)

siehe Kernobjekte

Literale

siehe Kernobjekte

Funktionsdeklarationen

siehe Funktionen