How does the double exclamation (!!) work in javascript? [duplicate]
!
is the logical negation or "not" operator. !!
is !
twice. It's a way of casting a "truthy" or "falsy" value to true
or false
, respectively. Given a boolean, !
will negate the value, i.e. !true
yields false
and vice versa. Given something other than a boolean, the value will first be converted to a boolean and then negated. For example, !undefined
will first convert undefined
to false
and then negate it, yielding true
. Applying a second !
operator (!!undefined
) yields false
, so in effect !!undefined
converts undefined
to false
.
In JavaScript, the values false
, null
, undefined
, 0
, -0
, NaN
, and ''
(empty string) are "falsy" values. All other values are "truthy."(1):7.1.2 Here's a truth table of !
and !!
applied to various values:
value │ !value │ !!value
━━━━━━━━━━━┿━━━━━━━━━━┿━━━━━━━━━━━
false │ ✔ true │ false
true │ false │ ✔ true
null │ ✔ true │ false
undefined │ ✔ true │ false
0 │ ✔ true │ false
-0 │ ✔ true │ false
1 │ false │ ✔ true
-5 │ false │ ✔ true
NaN │ ✔ true │ false
'' │ ✔ true │ false
'hello' │ false │ ✔ true