Argumente in JavaScript (Argumente in JavaScript), Lektion, Seite 722791
https://www.purl.org/stefan_ram/pub/argumente_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

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

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722791 stefan_ram:722791 Argumente in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722791, slrprddef722791, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/argumente_javascript