2012-06-10 8 views
5

Gibt es einen Vorteil, außer einer expliziten Konvertierung, die Verwendung eines doppelten nicht-Operator in JavaScript? Es sieht so aus, als würden die Leute heutzutage gerne nach neuen APIs suchen, die das Double nicht benutzen, aber ich habe nie einen Vorteil daraus gezogen.double not (!!) vs type coercion in JavaScript

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

Das einzige, was ich gelesen habe, ist, dass es eine kurze, dunkel Weise gegossen wird, um boolean zu geben, jedoch, wenn in diesem Zusammenhang verwendet wird das Objekt automatisch sein sowieso boolean dazu gezwungen, da wir zu überprüfen, Schau, ob es definiert ist.

Kurz gesagt, warum machen Menschen zwei boolesche Operationen an der Oberseite des Motors?

+0

Wie der Link zeigt, wird global eine Umwandlung in einen booleschen Wert vorgenommen. Hier ist hauptsächlich beabsichtigt, den Code lesbarer zu machen, was bedeutet, dass nur der boolesche Wert benötigt wird. –

+0

Ich weiß genau was !! Pseudo-Operator tut das nicht, was ich gefragt habe. – Vreenak

+2

Es gibt keine echte Verwendung, es ist eine schlechte Angewohnheit für Pretext Lesbarkeit. –

Antwort

7

Ich sehe keinen Grund, es in Kontext zu tun, wie Sie präsentieren. Es wird das Ergebnis in keiner Weise beeinflussen.

Das einzige Mal, dass ich dies als eine gute Idee sehen würde, wenn Sie eine Funktion Gebäude sind, die einen Bool Wert zurückgeben sollten, und Sie müssen es von einem anderen Wert werfen, zum Beispiel ...

function isNotFalsy(val) { return !!val; } 

Das Beispiel kann ein bisschen gezwungen sein, aber Sie bekommen die Idee. Sie möchten immer sicherstellen, dass der Rückgabewert dem Typ entspricht, den der Benutzer erwarten würde.

+0

Akzeptiert als am besten, möchte @Pointy auf einige APIs hinweisen, die = =/typeof boolesche Werte benötigen. – Vreenak

1

Sie brauchen !! nicht innerhalb eines if Ausdrucks zu verwenden.
Es wird verwendet, um den Wert in einen booleschen Wert zu konvertieren, und der if tut es standardmäßig.

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

Danke für die Antwort, aber ich weiß das. Die Frage war, ob es einen Vorteil bietet, sie in einer if-Anweisung zu verwenden, da es so üblich ist. – Vreenak

+2

@watkinsj. Ich glaube, ich habe diese Frage in der ersten Zeile beantwortet ... – gdoron

+0

Sie sagten, es ist unnötig. Ich habe darauf in der Frage hingewiesen. Ich sehe keine Antwort auf irgendwelche Vorteile oder eine Erklärung für ihre Verbreitung in der if-Anweisung. – Vreenak