4186 Stimmen

Was ist der !! (nicht nicht) Operator in JavaScript?

Ich habe einen Code gesehen, der einen mir unbekannten Operator in Form von zwei Ausrufezeichen zu verwenden scheint, etwa so: !! . Kann mir bitte jemand sagen, was dieser Operator macht?

Der Kontext, in dem ich dies sah, war,

this.vertical = vertical !== undefined ? !!vertical : this.vertical;

1428 Stimmen

Erinnern Sie sich daran mit "bang, bang, du bist boolesch"

126 Stimmen

Nur um das festzuhalten: Tun Sie nicht, was dort steht. Machen Sie if(vertical !== undefined) this.vertical = Boolean(vertical); - es ist viel sauberer und klarer, was vor sich geht, erfordert keine unnötige Zuweisung, ist ganz Standard und ist genauso schnell (auf aktuellem FF und Chrome) jsperf.com/boolean-conversion-speed .

0 Stimmen

"Jeder anständige Programmierer sollte wissen, was vor sich geht..." - manchmal hilft es dem Compiler, besseren Code in kompilierten Sprachen zu erzeugen. Ich weiß, dass es früher von Microsoft bei der Verwendung von C-Code empfohlen wurde, weil es den besten Code erzeugt. (Wahrscheinlich wird es immer noch empfohlen, aber ich kann die Referenz im Moment nicht finden).

32voto

Bill the Lizard Punkte 384619

Es ist ein Doppel not Betrieb. Die erste ! wandelt den Wert in einen booleschen Wert um und invertiert seinen logischen Wert. Die zweite ! invertiert den logischen Wert zurück.

32voto

Alireza Punkte 92209

!! Es verwendet NOT Operation zweimal zusammen, ! konvertieren den Wert in eine boolean und kehren es um, so dass es zweimal verwendet wird und den Booleschen Wert (falsch oder wahr) anzeigt. Hier ist ein einfaches Beispiel, um zu sehen, wie !! funktioniert:

Zunächst der Ort, den Sie haben:

var zero = 0;

Dann tun Sie !0 wird er in einen booleschen Wert umgewandelt und als true , denn 0 ist falsy erhalten Sie den umgekehrten Wert, der in einen booleschen Wert umgewandelt wird, so dass er ausgewertet wird als true .

!zero; //true

aber wir wollen nicht, dass der umgekehrte boolesche Version des Wertes, so dass wir ihn wieder umkehren können, um unser Ergebnis zu erhalten! Deshalb verwenden wir eine weitere ! .

Im Grunde genommen, !! stellen Sie sicher, dass der Wert, den wir erhalten, boolesch ist, nicht falsy, truthy oder string usw..

Es ist also so, als würde man Boolean Funktion in Javascript, sondern einfach und kürzer Weg, um einen Wert in boolesche konvertieren:

var zero = 0;
!!zero; //false

32voto

Prakash Punkte 6452

Es simuliert das Verhalten des Boolean() Gießfunktion. Die erste NOT gibt einen booleschen Wert zurück, unabhängig davon, welcher Operand ihr übergeben wird. Die zweite NOT verneint dies Boolean Wert und gibt somit den true Boolescher Wert einer Variablen. Das Endergebnis ist dasselbe wie bei der Verwendung der Boolean() Funktion auf einen Wert.

26voto

Annika Backstrom Punkte 13557

! ist "boolean not", was im Wesentlichen den Wert von "enable" in sein boolesches Gegenteil verwandelt. Das zweite ! kehrt diesen Wert um. Also, !!enable bedeutet "nicht nicht aktivieren" und gibt Ihnen den Wert von enable als Boolescher Wert.

25voto

GreQ Punkte 961

Ich denke, es ist erwähnenswert, dass eine Bedingung, die mit logischem UND/ODER kombiniert ist, keinen booleschen Wert zurückgibt, sondern letzten Erfolg oder ersten Misserfolg im Falle von && und erster Erfolg oder letzter Misserfolg im Falle von || der Bedingungskette.

res = (1 && 2); // res is 2
res = (true && alert) // res is function alert()
res = ('foo' || alert) // res is 'foo'

Um die Bedingung in ein wahres boolesches Literal umzuwandeln, können wir die doppelte Negation verwenden:

res = !!(1 && 2); // res is true
res = !!(true && alert) // res is true
res = !!('foo' || alert) // res is true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X