Wie verwenden die JavaScript-Vergleichsoperatoren die Typen?

7

Welche Regeln gelten für die relationalen Vergleichsoperatoren von JavaScript, wenn die Operanden unterschiedliche Typen haben?

Zum Beispiel, wie wird true > null ausgewertet? Ich kann das in meine Entwicklerkonsole eingeben und es gibt das Ergebnis true , aber warum?

Ich habe ein wenig gesucht, habe aber keine Blogposts gefunden, die das erklären, obwohl es eine Menge Erklärungsarten für Vergleichsoperatoren == und === gibt.

    
Caspar 04.02.2013, 13:33
quelle

1 Antwort

19

JavaScript-Vergleichsoperator Typ Koerzition wird in der JavaScript-Spezifikation definiert, speziell in den Abschnitten 11.8 bis 11.8.5 , die die Operatoren beschreiben, und Abschnitte 9.1 ( ToPrimitive) und 9.3 (ToNumber) , die den Vorgang des Operatorszwangs beschreiben.

Kurz gesagt, die 4 Vergleichsoperatoren ( < , > , <= und >= ) tun ihr Bestes, um jeden Operanden in eine Zahl umzuwandeln, und vergleichen dann die Zahlen. Die Ausnahme ist, wenn beide Operanden Zeichenfolgen sind, in diesem Fall werden sie alphabetisch verglichen.

Insbesondere

  1. Wenn ein Argument o ein Objekt anstelle eines Primitivs ist, versuchen Sie, es in einen primitiven Wert durch Aufruf von o.valueOf() oder - wenn o.valueOf nicht definiert wurde oder beim Aufruf keinen primitiven Typ zurückgegeben hat - durch Aufruf von o.toString()

  2. Wenn beide Argumente Strings sind, vergleichen Sie sie nach ihrer lexikographischen Anordnung . Dies bedeutet beispielsweise, dass "a" < "b" und "a" < "aa" beide wahr zurückgeben.

  3. Andernfalls konvertieren Sie jedes Grundelement in eine Zahl , was bedeutet:

    • undefined - & gt; %Code%
    • NaN - & gt; +0
    • Null primitiver Typ - & gt; Boolean wenn 1 , true wenn +0
    • false - & gt; versuchen, eine Zahl aus der Zeichenfolge
    • zu analysieren
  4. Vergleichen Sie dann jedes Element so, wie Sie es für den Operator erwarten würden, mit dem Vorbehalt, dass jeder Vergleich, der String mit NaN vergleicht, ausgewertet wird.

Das bedeutet also Folgendes:

%Vor%     
Caspar 21.02.2013, 12:57
quelle

Tags und Links