Wszystkie przykłady oprócz 3 > 2 > 1
zalogują wartość true
.
Dlaczego 3 > 2 > 1
zaloguje false
? Przeanalizujmy to krok po kroku.
Operatory >
(więcej niż) oraz <
(mniej niż) porównują ze sobą dwa operandy, zwracając wartość logiczną z takiego porównania.
Gdy używamy ciągu kilku porównań, sytuacja wygląda analogicznie, jak w przypadku używania ciągu innych operatorów np. dodawania, mnożenia, porównania, koniunkcji itp.
Kolejność oraz kierunek wykonywania operacji wykonywanych przez operatory definiuje tabela pierwszeństwa operatorów (operator precedence).
Operatory >
i <
wykonują porównania po kolei, od lewej do prawej.
Dla 3 > 2 > 1
w pierwszej kolejności wykonane zostanie porównanie 3 > 2
i zwróci ono wartość true
.
Ciąg porównań zostanie zredukowany i będzie w kolejnym kroku porównywał true > 1
.
W przypadku gdy porównywane wartości nie są wartościami liczbowymi, zostają one sprowadzone do wartości liczbowej za pomocą algorytmu funkcji Number()
.
Wartość Number(true)
zwraca wartość 1
.
W językach programowania, wartości logiczne true
/false
są z reguły reprezentowane przez wartości liczbowe 1
/0
.
Finalnie true > 1
zostanie więc skonwertowane do 1 > 1
. Wynikiem takiego porównania będzie rzecz jasna wartość false
.
W pozostałych przykładach porównań zachodzi analogiczny proces.
Z początkowych porównań zwracana jest wartość logiczna. Następnie kolejne porównania konwertują wartości logiczne na wartości liczbowe i dokonują kolejnych porównań.
true < 3
to prawda, true < 2
to prawda i true > 0
to też prawda.