Wie funktioniert (A == B == C) Vergleich in JavaScript?

7

Ich habe erwartet, dass der folgende Vergleich einen Fehler ergibt:

%Vor%

aber seltsamerweise gibt es false zurück.

Noch seltsamer,

%Vor%

gibt true zurück.

Wie funktioniert dieser "ternäre" Vergleich?

    
laggingreflex 10.04.2014, 06:45
quelle

6 Antworten

6

Zuerst müssen wir verstehen, dass ein == Vergleich zwischen einer Zahl und einem booleschen Wert zu einer internen Typumwandlung des booleschen Wertes in eine Zahl führt ( true wird 1 und false wird 0 )

Der von Ihnen angezeigte Ausdruck wird von links nach rechts ausgewertet. Also, zuerst

%Vor%

wird ausgewertet und das Ergebnis ist true und Sie vergleichen true mit 0. Da true während des Vergleichs 1 wird, wird 1 == 0 zu false ausgewertet. Aber wenn du sagst

%Vor%

A == B ist true , was im Vergleich mit der Zahl 1 wird und Sie vergleichen das wieder mit 1. Deshalb gibt es true aus.

    
thefourtheye 10.04.2014, 06:50
quelle
6

Zuweisungsoperatoren wie = sind rechtsassoziativ : Wenn eine Reihe dieser Operatoren die gleiche Priorität hat, werden sie von rechts nach links verarbeitet, sodass A = B = 0 als% verarbeitet wird. co_de% ( A = (B = 0) gibt 0 zurück, also enden sowohl A als auch B als 0).

Gleichheitsoperatoren wie == sind linksassoziativ : Operatoren mit gleichem Vorrang werden von links nach rechts verarbeitet. B = 0 wird als A == B == 0 verarbeitet, und da (A == B) == 0 wahr (1) ist, wird A == B , was falsch (0) ist.

Ebenso wird 1 == 0 als A == B == 1 verarbeitet, was (A == B) == 1 wird, was wahr (1) ist.

Quelle und weitere Informationen: Ссылка

    
kwc 10.04.2014 06:54
quelle
2

Zuerst gibt A == B true zurück, was dann mit 0 verglichen wird, true == 0 , was false zurückgibt, oder true == 1 , was true zurückgibt.

    
Mosho 10.04.2014 06:49
quelle
2

Zuerst prüft es Ihre Klausel auf A == B, was wahr ist, als es beginnt, true == 0 zu prüfen, und 0 ist falsch. Wenn Sie also A == B == 1 überprüfen, überprüfen Sie A == B, was wahr ist, und true == 1. Also wird true zurückgegeben. Wenn Sie wirklich alle Möglichkeiten prüfen möchten, sollten Sie so etwas tun:

%Vor%     
Max Langerak 10.04.2014 06:49
quelle
1

Sie können von links nach rechts arbeiten. In diesem Fall überprüfen Sie zuerst, ob A == B, dann prüfen Sie, ob dies gleich 0 ist. Also, da A == B, ist dies wahr. Jetzt wird es (wahr == 0), was falsch ist. Wenn A = 1, B = 2, dann würde (A == B == 0) wahr ergeben! Dies liegt daran, dass A == B falsch ist und (falsch == 0) wahr ist!

    
MShah 10.04.2014 06:51
quelle
1
%Vor%     
Sardor Dushamov 10.04.2014 06:47
quelle