Warum ist "alert (321)" alert "false"?

8

Ich würde gerne fragen, warum

%Vor%

Gibt FALSE in Javascript zurück.

Ich weiß, dass das Richtige ist:

%Vor%

Aber der Code 1 sollte entweder eine Fehlermeldung oder entweder TRUE zurückgeben! Gibt es einen bestimmten Grund, dass diese Gleichung FALSE zurückgibt?

    
George 01.05.2011, 23:02
quelle

4 Antworten

31

Wenn Sie Klammern hinzufügen, um zu zeigen, wie JavaScript es interpretiert, wird es viel klarer:

%Vor%

Lass uns das auseinander nehmen. Zuerst wird 3 > 2 ausgewertet. Ja, drei sind größer als zwei. Daher haben Sie jetzt Folgendes:

%Vor%

true wird in eine Zahl umgewandelt. Diese Zahl ist zufällig 1 . 1 > 1 ist offensichtlich falsch. Daher lautet das Ergebnis:

%Vor%     
icktoofay 01.05.2011 23:05
quelle
6

Erste 3>2 ergibt TRUE, was wahrscheinlich implizit in 1 konvertiert wird. Sie erhalten also 1>1 , was FALSE ist.

Vielleicht möchten Sie hier einen Fehler, aber Javascript ist sehr schwach typisiert, also wird es versuchen, implizite Konvertierungen zu machen, ohne sich zu beschweren.

BEARBEITEN:

Sie fragen also, warum die Syntax der Programmiersprache nicht immer mit der mathematischen Notation übereinstimmt? Ich würde sagen (1) sie haben unterschiedliche Prioritäten und (2) es macht mehr Sinn für den Compiler, es anders zu machen.

Dies ist jedoch nicht ungewöhnlich:

  • "x = 3" (Anweisung) und x = 3 (Zuweisung)
  • "x & gt; & gt; 1" (viel mehr als 1) und x >> 1 (bitshift)
  • "a | b" (a teilt b) und a | b (bitweises OR).

Die Liste geht weiter ...

    
Gustav Larsson 01.05.2011 23:04
quelle
4

Es wird ausgewertet wie:

%Vor%

Was ist das gleiche wie:

%Vor%

Was ist schließlich:

%Vor%

Aber hey, zumindest 3 > 2 > 0 wird funktionieren;)

    
Matt 01.05.2011 23:04
quelle
0

Lasst uns grundlegend brechen, seine zwei & gt; Operatoren mit gleicher Priorität, also welche läuft zuerst?

JavaScript hat die Operator-Priorität zugewiesen, wie in der Operator-Prioritätstabelle von heruntergeladen MDN

Größer als (& gt;) (11 in der Tabelle) läuft von links nach rechts, daher läuft als erstes 3 & gt; 2, was zu WAHR

führt

Jetzt haben wir also TRUE & gt; 1,

Wenn JavaScript zwei verschiedene Arten von Werten (bool und number) zum Vergleich sieht, wird der Typ "coercion" eingegeben, was bedeutet, dass TRUE (type conversion) in 1,

umgewandelt wird

So wird JavaScript als 1 & gt; 1 ausgeführt, was zu FALSE

führt

    
Jack Ryder 01.05.2017 00:24
quelle

Tags und Links