Eintragsausdrücke in JavaScript
Die folgende Beispiele zeigt, daß direkt vor einem Namen (hier »Infinity« oder »PI«) manchmal auch ein Punkt ».« stehen darf, dem ein Wort (hier »this« oder »Math«) vorangeht.
- Auswertung
this.Infinity
Infinity
- Auswertung
Math.PI
3.141592653589793
Im folgenden sollen nun solche Ausdrücke, wie beispielsweise »this.Infinity«, näher beschrieben werden.
Zunächst einmal sei eine kurze Erklärung der Bedeutung vorangestellt: In JavaScript kann der Bezeichner »Infinity« verschiedene Bedeutungen (Werte) haben. Durch Voranstellung von »this.« wird festgelegt, welche Bedeutung gemeint ist.
Man stelle sich vor, daß »Infinity« in dem Verzeichnis »this« eingetragen ist und »this.Infinity« dann bedeutet „der Wertname »Infinity« der in dem Verzeichnis »this« (und nicht in irgendeinem anderen Verzeichnis, in dem es auch noch einen Wertnamen »Infinity« geben könnte) eingetragen ist“.
Verzeichnisse
Ein Verzeichnis ist etwas, das benannten Einträge aufnehmen kann. Jeder Eintrag hat einen Namen und einen Wert.
Beispielsweise ist »Math« ein Verzeichnis, das den Namen »PI« mit dem Wert «3.141592653589793» enthält.
Ein Verzeichnis ist gleichzeitig selber auch ein Wert (wie eine Zahl oder ein Text). Dies bedeutet beispielsweise, daß ein Verzeichnis der Wert eines Ausdrucks sein kann. Beispielsweise ist der Wert des Ausdrucks »this« ein Verzeichnis..
(Da ein Verzeichnis Werte enthalten kann und gleichzeitig auch selber ein Wert ist, kann ein Verzeichnis auch Verzeichnisse enthalten. Man denke hierbei auch an die Verzeichnisse eines Dateisystems (einer Festplatte), die ebenfalls Verzeichnisse enthalten können.)
- Arten von Werten
Werte
- Fundamentalwerte
- Zahlen
- Zeichenfolgen
- Wahrheitswerte
- Verzeichnisse
Die Syntax echter Eintragsausdrücke
Einen Ausdruck der aus einem Bezeichner besteht, dem ein Punkt ».« und ein Bezeichnername folgt, nennen wir einen echten Eintragsausdruck.
- Echter Eintragsausdruck
Ausdruck
.------------. .-. .----------------.
---.---| Bezeichner |---.--->( . )--->| Bezeichnername |--->
| '------------' ^ '-' '----------------'
| .----. |
'----->( this )------'
'----'- Beispiele echter Eintragsausdrücke
this.Infinity
Math.PI
Ein echter Eintragsausdruck darf hinter einem Punkt also einen beliebigen Bezeichnernamen enthalten (auch reservierte Wörter sind dort gestattet), während vor dem ersten Punkt ein Bezeichner oder »this« stehen muß.
Das Attribut „echt“ soll die Eintragsausdrücke mit einem Punkt von Eintragsausdrücken ohne Punkt unterscheiden, die es in ECMAScript auch gibt. In ECMAScript gilt »Infinity« nämlich ebenfalls als ein Eintragsausdruck, obwohl es keinen Punkt enthält. Zur Unterscheidung von den Eintragsausdrücken, nennen wir hier die Eintragsausdrücke mit einem Punkt „echte Eintragsausdrücke“.
Eintragsausdrücke
Ein Eintragsausdruck ist ein Bezeichner oder ein echter Eintragsausdruck.
- Eintragsausdruck: “MemberExpression” in ECMAScript 2018, “12.3 Left-Hand-Side Expressions”
Lexikalische Einheiten
Jeder Bezeichner, jeder Bezeichnername und jedes Literal stellt eine lexikalische Einheit dar. Der Punkt ».« vor dem Bezeichnernamen eines echten Eintragsausdrucks ist ebenfalls eine lexikalische Einheit. Das Wort »this« ist ebenfalls eine lexikalische Einheit.
(In einem Punktnumerale, wie »3.2« ist der Punkt aber keine lexikalische Einheit, sondern nur das gesamte Numerale.)
Das folgende Beispiel einer Auswertung zeigt einen echten Eintragsausdruck mit zwischen die lexikalischen Einheiten eingefügtem Leerraum.
- Auswertung
this . Infinity
Infinity
Obwohl der Punkt von Leerraum umgeben sein darf, ist er kein Operator, da der rechte Bezeichnername in einem echten Eintragsausdruck darin nicht als ein Ausdruck vorkommt und deswegen kein Operand sein kann.
»this.« kann oft entfallen
In dem meisten Fällen kann in diesem Kapitel des Kurses ein »this.« am Anfang eines Eintragsausdrucks auch entfallen.
Man kann also statt »this.Infinity« in diesem Kapitel des Kurses auch einfach nur »Infinity« schreiben.
Die Semantik von Eintragsausdrücken (Verzeichnisse und elementare Werte)
Ein Paar aus einem Bezeichnernamen und einen Wert nennen wir einen Eintrag.
- Ein Eintrag
PI: 3.141592653589793
Wir nennen den „linken“ Teil eines Eintrags (wie beispielsweise »PI«) auch den Namen oder den Schlüssel des Eintrags. Den „rechten“ Teil eines Eintrags (wie beispielsweise «3.141592653589793») nenne wir den Wert des Eintrags (oder auch den Wert des Namens oder den Wert des Schlüssels). Mit diesen Begriffen können wir sagen, daß ein Verzeichnis seinen Schlüsseln Werte zuordnet.
Eine Sammlung von Einträgen bezeichnen wir hier auch als ein Verzeichnis. Dabei sollen zwei Einträge nie denselben Schlüssel miteinander teilen. (Solch eine Sammlung erinnert an Verzeichnisse von Dateisystemen oder Abbildungen aus der Mathematik.)
- »Math« als Sammlung von Zuordnungen
.-------------------------.
| Math |
| ---- |
|-------------------------|
| PI: 3.141592653589793 |
| LN2: 0.6931471805599453 |
'-------------------------'
Bei einem echten Eintragsausdruck, wie »Math.PI«, hat der der Ausdruck vor dem Punkt, wie beispielsweise »Math«, also ebenfalls einen Wert. Dieser Wert ist aber kein Wert, wie eine Zahl oder ein Text, sondern eine Sammlung von Zuordnungen von Bezeichnernamen zu Werten.
Eine Zahl oder einen Text nennen wir auch einen elementaren Wert, wenn sie von den Verzeichnissen unterschieden werden sollen.
Der Wert eines Ausdrucks aus einem Bezeichner für ein Verzeichnis, einem Punkt ».« und einem Bezeichnernamen ist der Wert, der sich auf der rechten Seite in dem Eintrag mit dem angegebenen Bezeichnernamen auf der linken Seite befindet. So ist der Wert von »Math.PI« beispielweise der Wert aus der rechten Seite des Eintrags »PI: 3.141592653589793« in dem Verzeichnis »Math«.
Der Wortbestandteil „Eintrag-“ in der oben erklärten Bezeichnung „echter Eintragsausdruck“ kommt daher, daß ein echter Eintragsausdruck einen Eintrag aus einem Verzeichnis angibt.
Wenn über einen Eintrag eines Verzeichnisses gesprochen wird, so wird das Verzeichnis in diesem Zusammenhang auch manchmal als das Zielverzeichnis (des Eintrags) bezeichnet. Wird beispielsweise über den Ausdruck »this.Infinity« gesprochen, so wäre »this« ein Ausdruck für das Zielverzeichnis (von »Infinity«).
Die Sinnfamilie „Qualifikation“
Eine nähere Bestimmung nennt man auch ein „Qualifikation“.
Man sagt, daß der Bezeichnername »PI« im Eintragsausdruck »Math.PI« durch »Math« qualifiziert sei und nennt »Math« auch die Qualifikation von »PI« in »Math.PI«. Umgekehrt nennt man das »PI« ohne Qualifikation auch unqualifiziertes »PI«.
Eigentliche Namen
Den unqualifizierten Bezeichnernamen am Ende eines Eintragsausdruck nennen wir auch einen eigentlichen Namen. Der eigentliche Name von »Math.PI« ist also beispielsweise »PI«.
Der Kontext
Den Teil eines Eintragsausdrucks, der vor dem eigentlichen Namen steht, nennen wir auch manchmal den Kontext des eigentlichen Namens. Der Kontext im Ausdruck »Math.PI« ist beispielsweise »Math«.
»Math« ist der Name eines Verzeichnisses, aber der Begriff „Kontext“ bezieht sich mehr auf den Namen »Math« selber und nicht auf dessen Bedeutung (auf das Verzeichnis).
Eigenschaften
Ein Eintrag eines Verzeichnisse wird oft auch als eine Eigenschaft (dieses Verzeichnisses) bezeichnet.
Namen
In diesem Kurs werden Eintragsausdrücke auch oft als „Namen“ bezeichnet.
Übungsfragen
? Echte Eintragsausdrücke
Welche der folgenden Ausdrücke sind echte Eintragsausdrücke?
- »this.Math.PI«
- »this.Infinity«
- »Infinity«
- »3.141592653589793«
? Lexikalische Einheiten ⃗
Wie viele lexikalische Einheiten umfassen die folgenden Ausdrücke jeweils?
- »Math.PI«
- »this.Infinity«
- »Infinity«
- »3.141592653589793«
Zitate *
- ECMA-262, 2015-06 (Zitate vereinfacht)
- 12.3 Left-Hand-Side Expressions
- MemberExpression :
PrimaryExpression
MemberExpression . IdentifierName - 12.2 Primary Expression
- PrimaryExpression :
this
Identifier
Literal
( Expression )
Details zur Syntax von Eintragsausdrücken *
In diesem Abschnitt werden nun Details zur Syntax von Eintragsausdrücken vorgestellt, welche die Syntax etwas näher an der Darstellung in ECMAScript wiedergeben, aber beim ersten Lesen dieses Kurses auch ignoriert werden können.
Primärausdrücke *
Einige der Ausdrücke, die wir bisher kennengelernt haben, werden fachsprachlich als „Primärausdrücke“ bezeichnet.
Man kann sich unter einem Primärausdruck einen Ausdruck vorstellen, der praktisch nie eingeklammert werden muß, um als Ausdruck zu gelten. Im Vergleich dazu muß der Ausdruck »2 + 3« ja eingeklammert werden, damit er im Ausdruck »5 *( 2 + 3 )« noch als ein Ausdruck gilt.
Ein Primärausdruck kann das Wort »this«, ein Bezeichner, ein Literal oder ein eingeklammerter Ausdruck sein.
- Primärausdruck (Syntaxdiagramm)
Primaerausdruck
.----.
---.-------------->( this )--------------.--->
| '----' ^
| .------------. |
'----------->| Bezeichner |-----------'
| '------------' |
| .---------. |
'------------>| Literal |-------------'
| '---------' |
| .-. .----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '----------' '-'- Primärausdrücke (Beispiele)
this
Infinity
123
(123)
Eintragsausdrücke *
Ein Eintragsausdruck ist entweder ein Eintragsausdruck mit einem direkt folgenden Punkt ».« und einem jenem Punkte direkt folgenden Bezeichnernamen, oder ein Primärausdruck. (Bezeichnernamen wurden ja schon in einer früheren Lektion durch ein morphologisches Diagramm definiert.)
Im Syntaxdiagramm wird der Aufbau eines Eintragsausdrucks durch ein rekursives Diagramm beschrieben.
- Eintragsausdrucke (Syntaxdiagramme)
Eintragsausdruck
.------------------.
--->| Primaerausdruck |--->
'------------------'Eintragsausdruck
.------------------. .-. .----------------.
--->| Eintragsausdruck |-->( . )--->| Bezeichnername |--->
'------------------' '-' '----------------'
Wir nennen einen Eintragsausdruck, der kein Primärausdruck ist, einen echten Eintragsausdruck.
Die Struktur eines echten Eintragsausdrucks besteht darin, daß ein echter Eintragsausdruck ein Bezeichnername ist, vor dem noch ein durch einen Punkt ».« abgetrennter Eintragsausdruck steht.
Ein Eintragsausdruck besteht also entweder aus einem Namen, einem Punkt ».« (unteres Syntaxdiagramm) und einem Bezeichner oder nur aus einem Bezeichner (oberes Syntaxdiagramm).
Das Wort »this« ist ein Primärausdruck und somit selber bereits ein Eintragsausdruck (oberes Syntaxdiagramm).
Der Eintragsausdruck »this.Infinity« wird durch den Punkt in den Eintragsausdruck »this« einerseits und den Bezeichnernamen »Infinity« andererseits zerlegt (unteres Syntaxdiagramm).
- »this.Infinity« (syntaktische Analyse)
this . Infinity
Primaerausdruck
Eintragsausdruck Bezeichnername
'--------------- Eintragsausdruck -------------'
Verschachtelte Eintragsausdrücke *
Ein echter Eintragsausdruck besteht aus einem Bezeichnernamen, vor dem wieder ein Eintragsausdruck steht.
- Eintragsausdrucke (Syntaxdiagramme)
Eintragsausdruck
.------------------.
--->| Primaerausdruck |--->
'------------------'Eintragsausdruck
.------------------. .-. .----------------.
--->| Eintragsausdruck |-->( . )--->| Bezeichnername |--->
'------------------' '-' '----------------'
Der erste Eintragsausdruck eines echten Eintragsausdrucks kann seinerseits nun auch wieder ein echter Eintragsausdruck sein und einen weiteren Punkt enthalten. So ist beispielsweise der Eintragsausdruck »this.Math.PI« aufgebaut.
- Auswertung
this.Math.PI
3.141592653589793
Das Wort »this« ist ein Primärausdruck und somit ein Eintragsausdruck (oberes Syntaxdiagramm).
Der echte Eintragsausdruck »this.Math« wird durch den Punkt in den Eintragsausdruck »this« einerseits und den Bezeichnernamen »Math« andererseits zerlegt (unteres Syntaxdiagramm).
Der echte Eintragsausdruck »this.Math.PI« wird durch den rechtesten Punkt in den Eintragsausdruck »this.Math« einerseits und den Bezeichnernamen »PI« andererseits zerlegt (unteres Syntaxdiagramm).
Der gesamte Eintragsausdruck »this.Math.PI« wird also linksassoziativ interpretiert, das heißt, von links nach recht zusammengefaßt, also so, daß »this.Math« darin eine Einheit bildet.
Die folgende Auswertung, bei welcher der erste echte Eintragsausdruck eingeklammert ist, verdeutlich die Linksassoziativität: Die Bedeutung mit diesen Klammern ist dieselbe wie ohne sie.
- Auswertung
( this.Math ).PI
3.141592653589793
- »this.Math.PI« (syntaktische Analyse)
this . Math . PI
Primaerausdruck
Eintragsausdruck Bezeichnername
'--------------- Eintragsausdruck --------------' Bezeichnername
'----------------------------- Eintragsausdruck ------------------------------'
Syntax von Ausdrücken *
Wir können die Syntax von Ausdrücken nun um die Definition von Eintragsausdrücken erweitern.
- Neue, erweiterte Syntax
Ausdruck
.------------------.
---.----------------->| Primaerausdruck |-------------------------------.---->
| '------------------' ^
| .------------------. |
'----------------->| Eintragsausdruck |-------------------------------'
| '------------------' |
| .-. .------------------. |
'-------->( - )--->| Ausdruck |-------------------------------'
| '-' '------------------' |
| .-. .------------------. |
'-------->( + )--->| Ausdruck |-------------------------------'
| '-' '------------------' |
| .------. .------------------. |
'--->( typeof )--->| Ausdruck |-------------------------------'
| '------' '------------------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( * )--->| Ausdruck |----'
| '------------------' '---' '----------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( / )--->| Ausdruck |----'
| '------------------' '---' '----------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( + )--->| Ausdruck |----'
| '------------------' '---' '----------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( - )--->| Ausdruck |----'
| '------------------' '---' '----------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( === )--->| Ausdruck |----'
| '------------------' '---' '----------' |
| .------------------. .---. .----------. |
'----------------->| Ausdruck |--->( !== )--->| Ausdruck |----'
'------------------' '---' '----------'- Neue, erweiterte Syntax (vereinfacht)
Eintragsausdruck
.------------------.
--->| Primaerausdruck |--->
'------------------'Eintragsausdruck
.------------------. .-. .----------------.
--->| Eintragsausdruck |-->( . )--->| Bezeichnername |--->
'------------------' '-' '----------------'Primaerausdruck
.----.
---.-------------->( this )--------------.--->
| '----' ^
| .------------. |
'----------->| Bezeichner |-----------'
| '------------' |
| .---------. |
'------------>| Literal |-------------'
| '---------' |
| .-. .----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '----------' '-'
Zitat *
- Zitat (vereinfacht), ECMAScript 2016, 12.3 *
MemberExpression :
MemberExpression . IdentifierName