How does the double exclamation (!!) work in javascript?

Javascript

Javascript Problem Overview


I'm going through the Discover Meteor demo, and am struggling to figure out how exactly 'return !! userId;' works in this section:

Posts.allow({
  insert: function(userId, doc) {
  // only allow posting if you are logged in
    return !! userId;
  }
});

Javascript Solutions


Solution 1 - Javascript

! 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     │ ✔ truefalse
 truefalse  │ ✔ true
 null      │ ✔ truefalse
 undefined │ ✔ truefalse
 0         │ ✔ truefalse
 -0        │ ✔ truefalse
 1false  │ ✔ true
 -5false  │ ✔ true
 NaN       │ ✔ truefalse
 ''        │ ✔ truefalse
 'hello'false  │ ✔ true

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionwordsforthewiseView Question on Stackoverflow
Solution 1 - JavascriptJordan RunningView Answer on Stackoverflow