Der Kleiner-Operator in JavaScript
Einführende Beispiele
Falls beide Operandenwerte numerisch sind, so besagt dieser Operator, daß der erste Wert auf dem Zahlenstrahl vor dem zweiten kommt.
- Auswertung
2 < 3
true
Falls beide Operandenwerte Zeichenfolgen sind, drückt dieser Operator aus, daß die linke Zeichenfolge lexikographisch (alphabetisch) vor der rechten kommt.
- Auswertung
'abc' < 'def'
true
Die Syntax von »<«
Der Operator »<« ist ein binärer Infixoperator, wie beispielsweise auch »===«.
- Neue, erweiterte Syntax (vereinfacht)
Ausdruck
.----------.
---.----------------->| Literal |-------------------------------.--->
| '----------' ^
| .-. .----------. .-. |
'-------->( ( )--->| Ausdruck |--->( ) )----------------------'
| '-' '----------' '-' |
| .-. .----------. |
'-------->( - )--->| Ausdruck |-------------------------------'
| '-' '----------' |
| .-. .----------. |
'-------->( + )--->| Ausdruck |-------------------------------'
| '-' '----------' |
| .------. .----------. |
'--->( typeof )--->| Ausdruck |-------------------------------'
| '------' '----------' |
| .----------. .---. .----------. |
'----------------->| Ausdruck |--->( ** )--->| Ausdruck |----'
| '----------' '---' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( * )----->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( / )----->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( + )----->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( - )----->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( < )----->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .---. .----------. |
'----------------->| Ausdruck |--->( === )--->| Ausdruck |----'
| '----------' '---' '----------' |
| .----------. .---. .----------. |
'----------------->| Ausdruck |--->( !== )--->| Ausdruck |----'
'----------' '---' '----------'
Prioritäten
Der Operator »<« hat eine höhere Priorität als der Operator »===« und ist linksassoziativ.
- Eigenschaften von Operatoren
A P A (A = Aritaet, P = Position [Zirkumfix, Praefix, Infix], A = Assoziativitaet)
() 1 Z Eingeklammerter Ausdruck
+ - typeof 1 P Unaere vorangestellte Operatoren (Vorzeichen)
** 2 I R Potenzieren
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< 2 I L Kleiner
== != === !== 2 I L Gleichheit, Ungleichheit
Die Semantik von »<«
Das Wichtigste zur Semantik wurde schon im Abschnitt „Einführende Beispiele“ gesagt.
Man findet mehr zu Semantik in der ECMAScript-Spezifikation unter “12.10.3 Runtime Semantics: Evaluation ”, wo die Semantik unter Bezug auf “7.2.14 Abstract Relational Comparison ” beschrieben wird. (Stand 2020).
Numerische Vergleiche
Unter einem numerischen Vergleich verstehen wir hier einen Vergleich zweier Zahlenwerte (numerische Zeichenfolgen zählen wir hier nicht zu den Zahlenwerten).
Hier hat der Operator »<« seine in der Mathematik übliche Bedeutung. Er ergibt »true«, genau dann, wenn der erste Wert auf dem Zahlenstrahl vor dem zweiten kommt.
Wir zeigen Beispiele numerischer Vergleiche:
Zwei ist kleiner als Drei.
- Auswertung
2 < 3
true
Drei ist nicht kleiner als Drei (sondern gleich).
- Auswertung
3 < 3
false
Vier ist nicht kleiner als Drei (sondern größer).
- Auswertung
4 < 3
false
Zeichenfolgenvergleiche
Unter einem Zeichenfolgenvergleich verstehen wir hier einen Vergleich zweier Zeichenfolge (numerisch oder nicht-numerisch).
Hier ergibt der Operator »<« »true«, genau dann, wenn der erste Wert lexikographisch vor dem zweiten kommt. Zum Vergleich einzelner Zeichen wird deren Position im Unicode verwendet.
Wir zeigen Beispiele zum lexikographischen Vergleich:
»a« kommt im Unicode vor »b«.
- Auswertung
'a' < 'b'
true
»A« kommt im Unicode vor »a«.
- Auswertung
'A' < 'a'
true
Die beiden Zeichenfolgen unterscheiden sich schon an der ersten Stelle, und das Zeichen, das bei der linken Zeichenfolgen an dieser Stelle steht (»b«) kommt vor dem Zeichen, das bei der rechten Zeichenfolgen an jener Stelle steht (»c«).
- Auswertung
'ba' < 'cad'
true
Die beiden Zeichenfolgen sind zunächst gleich (beide beginnen mit »a«), aber dann unterscheiden sie sich an einer Stelle (»b« beziehungsweise »c«), und das Zeichen, das bei der linken Zeichenfolge an dieser Stelle steht, (»b«) kommt vor dem rechten Zeichen, das bei der rechten Zeichenfolge an jener Stelle steht (»c«).
- Auswertung
'ab' < 'ac'
true
Ein Präfix gilt als kleiner. (»ab« ist ein Präfix von »abc«, da »abc« mit »ab« beginnt.)
- Auswertung
'ab' < 'abc'
true
Zeichenfolgen mit Ziffern werden nach denselben Regeln verglichen wie andere Zeichenfolgen.
- Auswertung
'01' < '1'
true
Gemischte Vergleiche
Unter einem gemischten Vergleich verstehen wir hier einen Vergleich einer Zeichenfolge (numerisch oder nicht-numerisch) mit einer Zahl.
Bei einem gemischten Vergleich wird die Zeichenfolge in eine Zahl gewandelt (als stünde das Vorzeichen »+« davor).
- Auswertung
+'01'
1
- Auswertung
'01' < 1
false
Würde die Zahl hingegen in eine Zeichenfolge gewandelt werden, ergäbe sich ja »true«.
- Auswertung
'01' < '1'
true
Man vergleiche mit der gemischten Addition, wo die Zahl gegebenenfalls tatsächlich in eine Zeichenfolge gewandelt wird.
- Auswertung
'01' + 1
"011"
Die Zahl »1« kommt vor »2«.
- Auswertung
'01' < 2
true
Das Leerzeichen ergibt den Zahlenwert »0«.
- Auswertung
+' '
0
- Auswertung
' ' < 1
true
Vergleiche mit Wahrheitswerten
Falls ein Wahrheitswert in einem Vergleich vorkommt, so wird dieser in eine Zahl gewandelt (als stünde das Vorzeichen »+« davor), und der Vergleich wird anschließend so durchgeführt wie ein Vergleich mit einer Zahl an Stelle des Wahrheitswertes.
- Auswertung
false < true
true
- Auswertung
true < 2
true
- Auswertung
true < 1
false
Spezielle Situationen
Falls einer der Operandenwerte »NaN« oder «undefined» ist, sollte das Ergebnis eigentlich »undefined« sein, aber weil dieser Operator immer einen Wahrheitswert ergeben soll, ergibt sich »false«.
Die abstrakte Operation von “7.2.14 Abstract Relational Comparison ” ergibt zunächst den Wert «undefined». Der Operator macht daraus dann laut “12.10.3 Runtime Semantics: Evaluation ” jedoch den Wert «false». (Stand 2020).
- Auswertung
1 < NaN
false
Der Wert »-0« gilt nicht als kleiner als »+0«.
- Auswertung
-0 < +0
false
Der Wert »Infinity« ist niemals kleiner als ein anderer Wert.
- Auswertung
Infinity < 2
false
Jeder andere Wert ist kleiner als »Infinity«.
- Auswertung
2 < Infinity
true
Kein Wert ist kleiner als »-Infinity«
- Auswertung
2 < -Infinity
false
»-Infinity« ist kleiner als jeder andere Wert.
- Auswertung
-Infinity < 2
true
Übungsfragen
? Übungsfrage
Können Sie die Werte der folgenden Ausdrücke vorhersagen?
- »true < true < true«
- »false < false < false«
- »1 < 1 < 1«