Argumente in JavaScript
Einführendes Beispiel
Das folgende Beispiel zeigt die Anwendung des schon behandelten unären Operators »-« auf dem Operandenausdruck »( -3 )«.
- Auswertung
-( -3 )
3
Im folgenden Ausdruck wurde der Operator »-« durch den Namen »this.Math.abs« ersetzt.
- Auswertung
this.Math.abs( -3 )
3
Das Ergebnis von »this.Math.abs« ist in diesem Fall dem Ergebnis des Operators »-« gleich (beide schneiden bei negativen Zahlen das Vorzeichen ab). Allerdings sind die runden Klammern um die »3« bei der Verwendung des Namens an Stelle des Operators notwendig, während sie bei Verwendung des Operators auch hätten entfallen können.
Bei »this.Math.abs« handelt es sich ebenfalls um eine Funktion, nur sind die Klammern des Aufrufausdrucks diesmal nicht leer (wie bei den bisher behandelten Aufrufausdrücken), sondern enthalten einen Operandenausdruck. Der gesamte Aufrufausdruck ist also »this.Math.abs( -3 )«.
- Ein Aufrufausdruck
this.Math.abs( -3 )
Syntax
Das folgende Syntaxdiagramm erweitert das bisherige Syntaxdiagramm für Aufrufausdrücke um die Möglichkeit eines in die Klammern geschriebenen Ausdrucks.
- Aufrufausdruck (Syntaxdiagramm, vereinfacht)
Aufrufausdruck (Ecma 262 2015, 12.3.4)
.------------------. .----------------.
--->| Eintragsausdruck |--->| Argumentangabe |--->
'------------------' '----------------'
Argumentangabe (Ecma 262 2015, 12.3)
.-. .-.
---.--->( ( )-------------------->( ) )---.--->
| '-' '-' ^
| .-. .-----------. .-. |
'--->( ( )--->| Ausdruck |--->( ) )---'
'-' '-----------' '-'
Prioritäten
Der Funktionsaufrufoperator kann nun weder als Postfix-Operator noch als Zirkumfix-Operator klassifiziert werden. (Obwohl es verbreitet ist, in ihm einen Postfix-Operator zu sehen.) Seine Arität kann auch anders als 1 sein. Daher verzichten wir bei ihm nun auf Angaben zur Arität und zur Position.
- Eigenschaften von Operatoren
A P A (A = Aritaet, P = Position [Zirkumfix, P=Praefix, Infix], A = Assoziativitaet)
() 1 Z Eingeklammerter Ausdruck
() Funktionsaufruf
+ - typeof 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
in 2 I L Enthaltensein
< 2 I L Kleiner
=== !== 2 I L Gleichheit, Ungleichheit
Der Argumentausdruck
Ein in die Aufrufklammern geschriebener Ausdruck wird auch Argumentausdruck des Aufrufs oder kurz Argumentausdruck genannt.
(Die Aufrufklammern, welche das Argument enthalten, werden entsprechend hier auch manchmal als Argumentklammern bezeichnet.)
Der Argumentwert
Der Wert des Argumentausdruck ist der Argumentwert.
Wenn es nicht wichtig ist, zwischen dem Argumentausdruck und Argumentwert zu unterscheiden, so spricht am auch einfach nur von einem Argument. Dann muß dem Zusammenhang entnommen werden, ob damit der Argumentausdruck oder der Argumentwert gemeint ist – manchmal sind auch beide Interpretationen gleichzeitig möglich.
Anwendung
Wenn eine Funktion mit einem Argument zusammen aufgerufen wird, dann sagt man auch, daß die Funktion auf dieses Argument angewendet werde. Man nennt »this.Math.abs( -3 )« also beispielsweise „die Anwendung der Funktion »this.Math.abs« auf den Wert »-3«“. Damit kann sowohl der Ausdruck »this.Math.abs( -3 )« als auch dessen Auswertung gemeint sein.
Semantik
Bei der Auswertung eines Aufrufs mit einem Argumentausdruck wird zuerst der Argumentausdruck ausgewertet. Dadurch wird der Argumentwert erhalten.
Dann wird die aufgerufene Funktion mit dem im vorigen Schritt ermittelten Argumentwert inkarniert. (Das heißt: Es wird eine Kopie der Funktion angelegt, die mit diesem Argumentwert verbunden wird.)
Nun wird die gebildete Inkarnation aktiviert, also gestartet.
Die Inkarnation läuft dann. Wenn sie fertig ist, legt sie das Ergebnis dieser Auswertung des Aufrufs fest.
Beispiel: Bei der Auswertung von »this.Math.abs( 2+3 )« wird zuerst der Argumentwert «5» ermittelt. Dann wird die Inkarnation »this.Math.abs( 5 )« gebildet und gestartet, die als Wert für den gesamten Ausdruck »this.Math.abs( 2+3 )« die Zahl «5» festlegt.
Spezielle Semantik der Math-Funktionen
Bei den in dieser Lektion als Beispiel vorgestellten Math-Funktionen wird der Argumentwert immer zuerst in einer Zahl umgewandelt.
- ECMAScript-2019 -Zitat (Kursivschrift hinzugefügt)
- Each of the following Math object functions applies the ToNumber abstract operation to each of its arguments
Weiteres Beispiel
Der folgende Ausdruck zeigt den JavaScript -Ausdruck, welcher der deutschen Nominalphrase „Der Sinus von 2“ entspricht.
- Auswertung
this.Math.sin( 2 )
0.9092974268256817
Wandlung von »string« nach »number« mit »this.parseFloat«
Als weiteres Beispiel einer Funktion mit einem Argument wird in diesem Abschnitt »this.parseFloat« vorgestellt.
Hier wird die Zeichenfolge »2.2« als number-Wert interpretiert und zu dem Ergebnis der Wert von »2.1« addiert.
- Auswertung
2.1 + this.parseFloat( "12.00" )
14.1
Im nächsten Beispiel wird der ganzzahlige Zahlenwert der Zeichenfolge »-3« mit dem Wert von »27.89« multipliziert.
Als Argumente sind Strings mit Numeralia gestattet, die aber auch noch ein negatives Vorzeichen haben dürfen.
- Auswertung
this.Math.floor( 27.89 * this.parseFloat( "-" + "3" ))
-84
Detektion echter Zahlen mit »this.isNan«
Als weiteres Beispiel einer Funktion mit einem Argument wird in diesem Abschnitt »this.isNan« vorgestellt.
Diese Funktion wandelt ihr Argument zuerst in eine Zahl und ergibt dann «true» genau dann, wenn dieses Zahl der Wert «NaN» ist.
- ECMAScript 2019
- The isNaN function is the %isNaN% intrinsic object. When the isNaN function is called with one argument number, the following steps are taken:
- 1. Let num be ? ToNumber(number).
- 2. If num is NaN, return true.
- 3. Otherwise, return false.
- A reliable way for ECMAScript code to test if a value X is a NaN is an expression of the form X !== X. The result will be true if and only if X is a NaN.
- Auswertungen
typeof 2 === "number"
true
this.isNaN( 2 )
false
- Auswertungen
typeof "a" === "number"
false
this.isNaN( "a" )
true
- Auswertungen
typeof this.NaN === "number"
true
this.isNaN( this.NaN )
true
»isNaN( undefined )« ergibt »true«.
- Auswertungen
typeof undefined === "number"
false
this.isNaN( undefined )
true
Übersicht
In der folgenden Übersicht steht »this« für das globale Verzeichnis.
- Übersicht der Namen
Name Art Bedeutung
this.Infinity Zahl Unendlich
this.Math.PI Zahl die Kreiszahl Pi
this.Math.abs Funktion Betrag
this.Math.floor Funktion Boden
this.Math.isNaN Funktion "ist NaN"
this.Math.parseFloat Funktion Zahl eines Textes
this.Math.random Funktion Zufallszahl
this.Math.sin Funktion Sinus
this.undefined Wert "kein Wert"
this.NaN Zahl "keine Zahl"
Übungsfragen
? Ausdrücke lesen
Was ist der Argumentausdruck in dem Aufrufausdruck »this.Math.floor( 3 + 1 )«?
Was ist der Argumentwert in dem Aufrufausdruck »this.Math.floor( 3 + 1 )«?
- Der Argumentwert ist der Wert des Argumentausdrucks.
? Ausdrücke lesen (1)
Was ist der Argumentausdruck in dem Aufrufausdruck »this.Math.floor( this.Math.random() * 4 )«?
Welche Werte kann dieser Argumentausdruck haben?
Die Funktion »this.Math.floor« schneidet die Nachkommastellen ab. So haben «this.Math.floor( 2.0 )» und «this.Math.floor( 2.8 )» beispielsweise beide den Wert «2.0».
Eigentlich ergibt »this.Math.floor« die größte ganze Zahl, die nicht größer ist als der Argumentwert. Diese genauere Formulierung wird aber in diesem Kurs selten benötigt.
Welche Werte kann der Aufrufausdruck »this.Math.floor( this.Math.random() * 4 )« haben?
Sind diese Wert alle annähernd gleich wahrscheinlich? (Zur Beantwortung dieser Frage kann angenommen werden, daß »this.Math.random()« alle Werte zwischen 0 und 1−2⁻⁵³ mit gleicher Wahrscheinlichkeit liefert.) *
? Ermittlung von Operanden ⃗
Kann es eine Funktion »f« geben, die wie in den folgenden Beispielen gezeigt, den linken Operanden ihres Argumentausdrucks ergibt?
- Auswertungen
f( 1 + 3 )
1
f( 2 + 2 )
2
f( 3 + 1 )
3