I understand what the double not operator does in JavaScript. I'm curious about it's use though and whether or not a recent assertion that I made is correct.
I said that if (!!someVar)
is never meaningful nor is (!!someVar && ...
because both the if
and the &&
will cause someVar to be evaluated as a boolean so the !! is superfluous.
In fact, the only time that I could think of that it would be legitimate to use the double not operator is if you wanted to do a strict comparison to another boolean value (so maybe in return value that expects true or false explicitly).
Is this correct? I started to doubt myself when I noticed jQuery 1.3.2 used both if (!!someVar)
and return !!someVar && ...
Does the double not have any actual effect in these situations?
My personal opinion is that it just leads to confusion. If I see an if statement, I know it's evaluating it as a boolean.
Best Answer
In the context of
if
statements I'm with you, it is completely safe because internally, theToBoolean
operation will be executed on the condition expression (see Step 3 on the spec).But if you want to, lets say, return a boolean value from a function, you should ensure that the result will be actually boolean, for example:
In conclusion, the Boolean Logical Operators can return an operand, and not a
Boolean
result necessarily:The Logical AND operator (
&&
), will return the value of the second operand if the first is truly:And it will return the value of the first operand if it is by itself falsy:
On the other hand, the Logical OR operator (
||
) will return the value of the second operand, if the first one is falsy:And it will return the value of the first operand if it is by itself non-falsy:
Maybe it's worth mentioning that the falsy values are:
null
,undefined
,NaN
,0
, zero-length string, and of coursefalse
.Anything else (that is not falsy, a
Boolean
object or aBoolean
value), evaluated in boolean context, will returntrue
.