Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 87

4.8Arithmetische Ausdrücke

Оглавление

Dieser Abschnitt behandelt die Operatoren, die arithmetische oder andere numerische Manipulationen ihrer Operanden durchführen. Die Multiplikations-, Divisions- und Subtraktionsoperatoren sind unkompliziert, und wir behandeln sie gleich zu Beginn. Der Additionsoperator erhält einen eigenen Unterabschnitt, weil er auch String-Verkettungen durchführen kann und einige ungewöhnliche Umwandlungsregeln aufweist. Die unären Operatoren und die bitweisen Operatoren werden ebenfalls in eigenen Unterabschnitten näher betrachtet.

Die meisten arithmetischen Operatoren (mit Ausnahme der nachfolgend aufgeführten) können mit BigInt-Operanden (siehe 3.2.5) oder mit regulären Zahlen verwendet werden, solange Sie die beiden Typen nicht vermischen.

Die elementaren Operatoren sind ** (Potenzierung), * (Multiplikation), / (Division), % (Modulo: Rest nach Division), + (Addition) und - (Subtraktion). Die anderen fünf elementaren Operatoren werten einfach ihre Operanden aus, wandeln die Werte bei Bedarf in Zahlen um und berechnen dann die Potenz, das Produkt, den Quotienten, den Rest oder die Differenz. Nicht numerische Operanden, die nicht in Zahlen umgewandelt werden können, werden in den NaN-Wert konvertiert (Not a Number – keine Zahl). Wenn einer der Operanden NaN ist (oder dazu umgewandelt wird), lautet das Ergebnis der Operation ebenfalls NaN.

Der **-Operator hat Vorrang vor *, / und % (die wiederum Vorrang haben vor + und -). Im Gegensatz zu den anderen Operatoren arbeitet ** von rechts nach links, also ist 2**2**3 dasselbe wie 2**8, nicht wie 4**3. Ausdrücke wie -3**2 sind von Natur aus mehrdeutig. Je nach relativer Präzedenz von unärem Minus- und Exponentialoperator könnte dieser Ausdruck (-3)**2 oder -(3**2) bedeuten. Verschiedene Programmiersprachen handhaben diese Situation unterschiedlich, und statt hier eine eindeutige Position zu beziehen, wurde für JavaScript einfach festgelegt, dass es zu einem Syntaxfehler führt, in diesem Fall die Klammern wegzulassen. Dadurch ist man gezwungen, einen eindeutigen Ausdruck zu formulieren. Der Exponentialoperator ** ist der neueste arithmetische Operator in JavaScript: Er wurde mit ES2016 zu JavaScript hinzugefügt. Schon seit den frühesten Versionen von JavaScript existiert die Funktion Math.pow(), die genau die gleiche Operation ausführt.

Der /-Operator teilt seinen ersten Operanden durch seinen zweiten Operanden. Wenn Sie an Programmiersprachen gewöhnt sind, die Ganz- und Gleitkommazahlen unterscheiden, erwarten Sie bei der Teilung einer ganzen Zahl durch eine andere vielleicht ein ganzzahliges Ergebnis. Aber da in JavaScript alle Zahlen Gleitkommazahlen sind, liefern alle Divisionsoperationen Gleitkommazahlen als Ergebnis: 5/2 wird zu 2.5 berechnet, nicht zu 2. Die Division durch null liefert plus oder minus unendlich (Infinity oder -Infinity), während 0/0 zu NaN ausgewertet wird: In keinem dieser Fälle wird ein Fehler ausgelöst.

Der %-Operator berechnet den ersten Operanden modulo den zweiten Operanden. Es wird also eine Modulodivision durchgeführt, d.h. die Operation liefert den Rest, der verbleibt, wenn man den ersten Operanden ganzzahlig durch den zweiten Operanden teilt. Das Vorzeichen des Ergebnisses entspricht dem Vorzeichen des ersten Operanden. Beispielsweise wird 5 % 2 zu 1 und -5 % 2 zu -1 ausgewertet.

Obgleich der Modulooperator üblicherweise mit ganzzahligen Operanden verwendet wird, funktioniert er auch bei Gleitkommawerten. 6.5 % 2.1 ergibt beispielsweise 0.2.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх