Ich möchte wissen, warum der letzte falsch wird. Und "20a" verwandelt sich in das, was vorher verglichen wurde.
Von der MDN-Seite aus Vergleichsoperatoren :
%Vor%Bei relationalen abstrakten Vergleichen (z. B. & lt; =) werden die Operanden vor dem Vergleich zuerst in Grundelemente und dann in den gleichen Typ konvertiert.
Dies konvertiert "20"
in eine Zahl 20
und vergleicht sie. Da 20
größer ist als 10
, ist es wahr.
Dies vergleicht die beiden Zeichenfolgen. Da "20a"
(alphabetisch) größer ist als "10"
, ist es wahr.
Dies konvertiert "20a"
in eine Zahl. Das Ergebnis ist NaN
(do +"20a"
, um dies in Aktion zu sehen). NaN
ist nicht größer als jede Zahl, daher wird false zurückgegeben.
Der Vergleichsalgorithmus in ECMAScript wird hier beschrieben: Ссылка
Der Vergleich x & lt; y, wo x und y Werte sind, erzeugt wahr, falsch, oder undefined (was anzeigt, dass mindestens ein Operand NaN ist). Eine solche Ein Vergleich wird wie folgt durchgeführt:
Aufruf von ToPrimitive (x, Hinweisnummer).
Aufruf von ToPrimitive (y, Hinweisnummer).
3.Wenn Typ (Ergebnis (1)) Zeichenfolge und Typ (Ergebnis (2)) Zeichenfolge ist, fahren Sie mit Schritt 16 fort. (Beachten Sie, dass sich dieser Schritt von Schritt 7 im Algorithmus für unterscheidet der Additionsoperator + in und anstelle von oder.)
4.Anrufnummer (Ergebnis (1)).
5.Call ToNumber (Ergebnis (2)).
...
Im Fall von "20a">10
muss die JavaScript-Engine ToNumber auf "20a"
anwenden. . Der vollständige Algorithmus ist komplex, sagt aber Folgendes aus:
Wenn die Grammatik den String nicht als Erweiterung von interpretieren kann StringNumericLiteral, dann ist das Ergebnis von ToNumber NaN.
Sie vergleichen also NaN
mit 10
und jeder Vergleich mit NaN
gibt false zurück (oder undefined
, siehe Kommentare unten).
Tags und Links javascript