2015-04-20 17 views
7

fand ich einige Code zur Authentifizierung mit Winkel- und ich kann diesen Trick nicht verstehen:Bedeutung von !! Javascript

authService.isAuthenticated = function() { 
    return !!Session.userId; 
}; 

Was !! mean ‚unterschiedlich von userId‘ tut?

wann immer true = !!true = !!!!true =>etc, es nicht verstehen.

Jemand kann mir helfen?

(https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec für die Quelle, Teil 'The AuthService')

Antwort

11

!! Wandelt jeden Wert auf einen Wert boolean

> !!null 
false 

> !!true 
true 

> !!{} 
true 

> !!false 
false 

Wenn ein Wert ist, dann ist das Ergebnis falseyfalse sein wird. Wenn es truthy ist, wird das Ergebnis true sein.

Noch mehr, die dritte ! invertiert den umgerechneten Wert, so dass die obigen Beispiele werden:

> !!!null 
    true 

    > !!!true 
    false 

    > !!!{} 
    false 

    > !!!false 
    true 
+0

Sie werden nicht immer drei '' brauchen!. Nur ein oder zwei :) –

+0

Ja, aber das OP fragte, also ging ich nur um das Konzept dahinter zu klären :) –

+0

ja, aber es kam verwirrend. Das Konzept hier ist, dass das zweite '!' Die erste Negation negiert und somit den ursprünglichen Wahrheitszustand wiederherstellt, aber jetzt als echten Booleschen Wert (der durch das erste '!' Erzwungen wird). –

0

coerces oObject boolean. Wenn es falsch war (z. B. 0, null, undefined usw.), ist es false, ansonsten true.

!oObject //Inverted boolean 
!!oObject //Non inverted boolean so true boolean representation 

Also !! ist kein Operator, es ist nur der! Betreiber zweimal.

Geworben von: https://stackoverflow.com/a/784946/2218635

1

!! wird verwendet, um den Wert rechts davon in den entsprechenden booleschen Wert zu konvertieren.

!!false === false 
!!true === true 
2

Es zwingt, was eine boolean und nicht eine ganze Zahl oder leerer Wert zurückgegeben werden soll. Zum Beispiel 0 wertet false mit == aus, wird aber nicht mit ===. Um sicher zu sein, dass jede zurückgegebene Ganzzahl 0 in einen Booleschen Wert konvertiert wird, verwenden wir !!. Dies funktioniert auch, wenn null oder undefined zurückgegeben wird.

So was passiert, ist eigentlich:

var test = null; 
var result = !test; // returns true 
    result = !return; // returns false