Its being annoying
Following code :
var arrays = [1,2,3];
alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');
alerts as the multiple
where string is not concatenated with the ternary result.
But this code :
var arrays = [1,2,3];
alert('Array has ' + ((arrays.length > 0) ? 'multiple':'single') + ' value');
alerts as the Array has multiple value
where string is concatenated with the ternary result.
My question is :
Your first example is parsed this way
alert(('Array has ' + (arrays.length > 0)) ? 'multiple':('single' + ' value'));
given the operator precedence of +
is much higher than that of ?:
.
Both snippets are syntactically correct, but they differ because of operator precedence. The ternary operator has lower precedence than +
.
In the first snippet:
var arrays = [1,2,3];
alert('Array has ' + (arrays.length > 0) ? 'multiple':'single' + ' value');
Javascript evaluates the first part 'Array has ' + (arrays.length > 0)
, which gives the string 'Array has true'
. For conditional purposes, the nonempty string is the same as true
(usually called a truthy value). Because the first operand in the ternary operator is truthy, the value of the whole expression will be the value of the expression 'multiple'
, that's between the ?
and the :
.
When you add the parameters in the second snippet, you make the ternary operator take only (arrays.length > 0)
as its condition. That's why the code works as expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With