Hoe werkt het dubbele uitroepteken (!!) in javascript?

Ik ben bezig met de Discover Meteor-demo en heb moeite om erachter te komen hoe ‘return !! gebruikersnaam;’ werkt in deze sectie:

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

Antwoord 1, autoriteit 100%

!is de logische ontkenning of “niet”-operator. !!is !twee keer. Het is een manier om een ​​”truthy” of “falsy” waarde te casten naar respectievelijk trueof false. Gegeven een boolean, zal !de waarde teniet doen, d.w.z. !truelevert falseop en vice versa. Gegeven iets anders dan een boolean, wordt de waarde eerst geconverteerd naar een boolean en vervolgens genegeerd. Bijvoorbeeld, !undefinedconverteert eerst undefinednaar falseen negeert het, wat trueoplevert. Het toepassen van een tweede !operator (!!undefined) levert falseop, dus in feite converteert !!undefinedundefinednaar false.

In JavaScript zijn de waarden false, null, undefined, 0, -0, NaNen ''(lege tekenreeks) zijn “valse” waarden. Alle andere waarden zijn “truthy”.(1 ):7.1.2Hier is een waarheidstabel van !en !!toegepast op verschillende waarden:

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

Other episodes