ECMAScript Beziehungs operanden
- Vorherige Seite Additiver Operator
- Nächste Seite Identitätsoperator
Die Relationsoperator führen einen Vergleich durch. Jeder Relationsoperator gibt einen Boolean-Wert zurück.
Regelmäßige Vergleichsmethode
Die Relationsoperator "kleiner als", "größer als", "kleiner als oder gleich" und "größer als oder gleich" führen einen Vergleich von zwei Zahlen durch, der auf die gleiche Weise wie der arithmetische Vergleich durchgeführt wird.
Jeder Relationsoperator gibt einen Boolean-Wert zurück:
var bResult1 = 2 > 1 // true var bResult2 = 2 < 1 // false
Allerdings verhalten sich die beiden Strings unterschiedlich, wenn auf sie ein Relationsoperator angewendet wird. Viele Menschen glauben, dass "kleiner" bedeutet "vorne im Alphabet", und "größer" bedeutet "hinten im Alphabet", aber das ist nicht der Fall. Für Strings wird der Zeichencode jedes Zeichens des ersten Strings mit dem Zeichencode des entsprechenden Zeichens des zweiten Strings numerisch verglichen. Nach Abschluss dieser Vergleichsoperation wird ein Boolean-Wert zurückgegeben. Das Problem ist, dass die Zeichencodes der Großbuchstaben kleiner sind als die der Kleinbuchstaben, was bedeutet, dass sich die folgenden Situationen ergeben können:
var bResult = "Blue" < "alpha"; alert(bResult); // true ausgeben
Im obigen Beispiel ist der String "Blue" kleiner als "alpha", da der Zeichencode des Buchstaben B 66 und der des Buchstaben a 97 beträgt. Um den Vergleich in der tatsächlichen Alphabetreihenfolge durchzuführen, müssen die beiden Zahlen in die gleiche Groß-/Kleinschreibform (alle Großbuchstaben oder alle Kleinbuchstaben) umgewandelt werden, bevor sie verglichen werden:
var bResult = "Blue".toLowerCase() < "alpha".toLowerCase(); alert(bResult); // Ausgabe false
Durch Umwandlung beider Operanden in Kleinbuchstaben wird sichergestellt, dass "alpha" alphabetisch vor "Blue" steht.
Vergleich von Zahl und String
Eine weitere schwierige Situation tritt auf, wenn zwei Strings in der Form von Zahlen verglichen werden, z.B.:
var bResult = "25" < "3"; alert(bResult); // Ausgabe "true"
Dieser Codeabschnitt vergleicht den String "25" und "3". Beide Operanden sind Strings, daher wird der Vergleich der Zeichencodes durchgeführt (der Zeichencode von "2" ist 50, der Zeichencode von "3" ist 51).
Wenn jedoch einer der Operanden in eine Zahl umgewandelt wird, wird das Ergebnis interessant:
var bResult = "25" < 3; alert(bResult); // Ausgabe "false"
Hier wird der String "25" in die Zahl 25 umgewandelt und mit der Zahl 3 verglichen, was nicht überraschend ist.
Wenn eine Zahl und ein String verglichen werden, wandelt ECMAScript immer den String in eine Zahl um und vergleicht sie dann numerisch.
Was aber, wenn der String nicht in eine Zahl umgewandelt werden kann? Betrachten wir das folgende Beispiel:
var bResult = "a" < 3; alert(bResult);
Kannst du voraussagen, was dieses Code-Abschnitt ausgibt? Das Alphabet "a" kann nicht in einen sinnvollen Zahl umgewandelt werden. Wenn jedoch parseInt() auf es angewendet wird, wird NaN zurückgegeben. Gemäß den Regeln müssen alle Relationen, die NaN enthalten, falsch zurückgeben, daher gibt dieser Code auch false aus:
var bResult = "a" >= 3; alert(bResult);
Normalerweise muss ein Vergleich mit dem Operator kleiner als (>) und größer als oder gleich (>=) wahr sein, wenn die beiden Werte des Vergleichs kleiner als sind, aber wenn eine Zahl NaN ist, ist dies nicht der Fall.
- Vorherige Seite Additiver Operator
- Nächste Seite Identitätsoperator