Why use !! to coerce a variable to boolean for use in a conditional expression?

In that specific context, I would say that there is no difference between explicitely converting to boolean using !! or let the if expression being converted to a boolean naturally. What I mean by this is that if (x) will be interpreted as if (Boolean(x)), which is the same as if (!!x).

However, if you are returning a value from a function, for instance if you want to implement a arrayHasItems function, you could implement it this way:

function arrayHasItems(arr) {
    return arr.length;
}

Using the function in a if statement as is would work because the numerical value returned from the function would be converted to a boolean value. However, the client code expects the function to return a boolean value, so he might be checking the condition by doing:

if (arrayHasItems(arr) === true) {}

In this case it would fail, because the returned result from arrayHasItems was a number. Therefore, it would have been better to implement the function by returning a boolean like expected.

function arrayHasItems(arr) {
    return !!arr.length;
}

EDIT:

This brings up a new question: why !!arr.length and not just arr.length > 0

There isin't any difference between both in the result produced and you are not even saving bytes since both statements take the same amount of characters. However I created a test case and the double negation seems to perform better, but it might not be consistent across all browsers.

Tags:

Javascript