More specifically, is there a set of values ( a, b and c) for which the operator precedence matters in the statement:
var value = (a && b == c);
(with the exception of NaN).
More specifically, is there a set of values ( a, b and c) for which the operator precedence matters in the statement:
var value = (a && b == c);
(with the exception of NaN).
The language is parsed such that your statement is the equivalent of (a && (b == c))
. The equality operator will always run before &&
, ||
and other logical operators. You can find the nitty-gritty details here.
Yup. ==
binds more tightly than &&
, so what you have binds as
var val = a && ( b == c)
See here. So a==0
, b==1
and c==0
is false, while (a&&b)==c
is true.
(Fixed typo. Dammit.)
Yes
js> false && true == false
false
js> (false && true) == false
true
Since ==
has higher precedence than &&
, the first is parsed as false && (true == false)
, which is equivalent to false && false
, and thus evaluates to false
. The second is equivalent to false == false
, which is true