Double negation (!!) in javascript - what is the purpose? [duplicate]
It casts to boolean. The first !
negates it once, converting values like so:
-
undefined
totrue
-
null
totrue
-
+0
totrue
-
-0
totrue
-
''
totrue
-
NaN
totrue
-
false
totrue
- All other expressions to
false
Then the other !
negates it again. A concise cast to boolean, exactly equivalent to ToBoolean simply because !
is defined as its negation. It’s unnecessary here, though, because it’s only used as the condition of the conditional operator, which will determine truthiness in the same way.
var x = "somevalue"
var isNotEmpty = !!x.length;
Let's break it to pieces:
x.length // 9
!x.length // false
!!x.length // true
So it's used convert a "truethy" \"falsy" value to a boolean.
The following values are equivalent to false in conditional statements:
- false
- null
- undefined
- The empty string
""
(\''
) - The number 0
- The number NaN
All other values are equivalent to true.
Double-negation turns a "truthy" or "falsy" value into a boolean value, true
or false
.
Most are familiar with using truthiness as a test:
if (options.guess) {
// runs if options.guess is truthy,
}
But that does not necessarily mean:
options.guess===true // could be, could be not
If you need to force a "truthy" value to a true boolean value, !!
is a convenient way to do that:
!!options.guess===true // always true if options.guess is truthy