What is the !! (not not) operator in JavaScript? What is the !! (not not) operator in JavaScript? javascript javascript

What is the !! (not not) operator in JavaScript?


Converts Object to boolean. If it was falsey (e.g. 0, null, undefined, etc.), it will be false, otherwise, true.

!oObject  // inverted boolean!!oObject // non inverted boolean so true boolean representation

So !! is not an operator, it's just the ! operator twice.

Real World Example "Test IE version":

const isIE8 = !! navigator.userAgent.match(/MSIE 8.0/);  console.log(isIE8); // returns true or false 

If you ⇒

console.log(navigator.userAgent.match(/MSIE 8.0/));  // returns either an Array or null  

But if you ⇒

console.log(!!navigator.userAgent.match(/MSIE 8.0/));  // returns either true or false


It's a horribly obscure way to do a type conversion.

! is NOT. So !true is false, and !false is true. !0 is true, and !1 is false.

So you're converting a value to a boolean, then inverting it, then inverting it again.

// Maximum Obscurity:val.enabled = !!userId;// Partial Obscurity:val.enabled = (userId != 0) ? true : false;// And finally, much easier to understand:val.enabled = (userId != 0);


!!expr (two ! operators followed by an expression) returns a Boolean value (true or false) depending on the truthiness of the expression. It makes more sense when used on non-boolean types. Consider these examples, especially the 3rd example and onward:

          !!false === false           !!true === true              !!0 === false!!parseInt("foo") === false // NaN is falsy              !!1 === true             !!-1 === true  // -1 is truthy          !!(1/0) === true  // Infinity is truthy             !!"" === false // empty string is falsy          !!"foo" === true  // non-empty string is truthy        !!"false" === true  // ...even if it contains a falsy value     !!window.foo === false // undefined value is falsy      !!undefined === false // undefined primitive is falsy           !!null === false // null is falsy             !!{} === true  // an (empty) object is truthy             !![] === true  // an (empty) array is truthy; PHP programmers beware!