Why does "alert(3>2>1)" alert "false" [duplicate]
If you add parentheses to show how JavaScript is interpreting it, it gets much clearer:
alert( (3 > 2) > 1 );
Let's pick this apart. First, it evaluates 3 > 2
. Yes, three is greater than two. Therefore, you now have this:
alert( true > 1 );
true
is coerced into a number. That number happens to be 1
. 1 > 1
is obviously false. Therefore, the result is:
alert( false );
First 3>2
evaluates to TRUE, which is probably implicitly converted to 1, so you end up with 1>1
, which is FALSE.
You might want an error here, but Javascript is very weakly typed, so it will try to do implicit conversions, without complaining.
EDIT:
So you're asking why the programming language syntax does not always coincide with the mathematical notation? I would say (1) they have different priorities and (2) it makes more sense for the compiler to do it another way.
This is not uncommon though:
- "x = 3" (statement) and
x = 3
(assignment) - "x >> 1" (much more than 1) and
x >> 1
(bitshift) - "a | b" (a divides b) and
a | b
(bitwise OR).
The list goes on...
It's being evaluated like:
+(3>2) > 1
Which is the same as:
+(true) > 1
Which finally is:
1 > 1 = false
But hey, at least 3 > 2 > 0
will work ;)