What's the point of !!! in JS and other languages? | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 1

What's the point of !!! in JS and other languages?

I've just seen pro coder using !!! to negate a variable or condition. I checked it against every possible type I know including null and undefined and result was the same for ! as for !!!. Is there any reason to use !!! in javascript? Does it have any purpose in other languages? Is there even a reason to use !! (double !)? I've seen these in some old projects only, but it seems useless now and linters tend to mark it as obsolete.

1st Nov 2020, 10:35 AM
Sharak
4 Answers
+ 1
Sharak I think there are situations where you want a boolean. Here are the common situations. 1. In a predicate that needs to return a boolean value e.g a predicate for filter or sort 2. When using static type checkers like Flow. 3. Some functions simply require booleans and will mess up without it. e.g many libraries may do this if (val === true) // do something. If you pass in a truthy, it will fail.
1st Nov 2020, 4:49 PM
Ore
Ore - avatar
+ 5
There is no difference in its result. For every value of x, !x = !!!x But technically, there is a subtle but irrelevant difference. If x = 6 Then, !x = !6 = false !!!x = !!false = !true = false However, !! is not completely irrelevant. It forces any value to become boolean. It is discouraged in JavaScript because there is already a Boolean wrapper for that purpose. !! 6 = Boolean(6)
1st Nov 2020, 12:32 PM
Ore
Ore - avatar
+ 2
!! force the value is tested against to be its boolean counterpart rather than kinda ambiguous truthy and falsy. so !!! is a negation of that boolean value
1st Nov 2020, 10:53 AM
Rei
Rei - avatar
0
Ore sorry but I can't see even this "irrelevant difference". It's all about what !x and !!!x returns and it's always the same. Surely x and !!x differ in types and values as !!x is always a boolean, but when used as a condition then there's absolutely no difference. Null, undefined, '' (empty string), 0 (zero) - all evaluate to false (just like !!null, !!undefined, !!0 and !!'') so there's really no point to use !! either. Is that correct?
1st Nov 2020, 4:27 PM
Sharak