In someone else's code I found this way to test the existence of a variable :
if(!!variable) { //Do something } else { //Something else } Is there a reason to test with if(!!variable) instead of if(variable) ? Is it a good practice?
Is there a reason to test with
if(!!variable)instead ofif(variable)?
No.
Using if() will coerce the condition to a boolean anyway, there's no need to manually do it. Using this sort of syntax makes sense when you want to guarantee you've got a boolean elsewhere, for example if you wanted to log the truthiness of the expression:
console.log(!!variable) This will ensure that you get either true or false logged, rather than the original value of the variable. But inside an if? It makes no difference.
if(), which is what the question was asking.No, in the case of a if, their is usually no reason to write that in JS.
I would not call it bad practice, since it can often come from programmer coming from strongly typed language, and is a common quick way to do the conversion to bool in thoses language.
It can also be used to emphasise the importance of the truthiness of the value in a long if, and show the programmer didn t forget to put the condition.
TL:DR: As for a lot of things: it may not be good practice, but it only become bad practice if your team is not used to that practice, either train them, document, or leave it.
Double negation is a bit of a hacky way (IMHO) to convert a variable to bool. using ! on variable coerces it to a bool and negates it, and using it again convert it back to the 'correct' value. So !!0 === false
As mentioned by James there is no reason to do this inside an if statement. The only reason really to do this would be to coerce to a bool for logging purposes or similar so the value logged is true or false rather than 0, an empty string etc
if(0) and if(!!0)if coerces the value anyway.Double ! (!!) is not an operator. It's just ! twice - double negation.
!! operator and what does it do?".
!!i can think of is to convert something tobool. E.g.var i = !!0; console.log(i); //false (instead of 0).ifconverts always to boolean.