2016-06-30 34 views
3

Im Code von jemand anderem fand ich diese Art und Weise die Existenz einer Variablen zu testen:Warum "if (!! variable)" anstelle von "if (variable)"?

if(!!variable) { 
    //Do something 
} else { 
    //Something else 
} 

Gibt es einen Grund mit if(!!variable) statt if(variable) zu testen? Ist es eine gute Übung?

+1

Warum, tatsächlich? Scheint mir weniger lesbar. Ich kann es kaum erwarten zu sehen, was andere sagen. – duffymo

+0

Nur die Verwendung von '!!' kann ich mir vorstellen, wenn ich etwas in 'bool' umwandele. Z.B. 'var i = !! 0; console.log (i); // false (statt 0) '. – Arg0n

+1

In diesem speziellen Fall macht es keinen Unterschied, denke ich. Aber es ist nützlich, wenn Sie einen beliebigen Wert in einen booleschen Wert umwandeln möchten (wenn Sie ihn später in der Datenbank speichern, oder so) –

Antwort

6

Gibt es einen Grund mit if(!!variable) statt zu testen von if(variable)?

Nr

if() verwendet, wird der Zustand in einen ohnehin boolean zwingen, gibt es keine Notwendigkeit, manuell zu tun. Mit dieser Art von Syntax macht Sinn, wenn Sie sicherstellen wollen Sie einen boolean an anderer Stelle haben, zum Beispiel, wenn Sie die Truthiness des Ausdrucks anmelden wollen:

console.log(!!variable) 

Dadurch wird sichergestellt, dass Sie entweder true oder false protokolliert, anstatt den ursprünglichen Wert der Variablen. Aber in einem if? Es macht keinen Unterschied.

+0

Es ist auch nützlich zusammen mit anderen logischen Ops: '0 && true' ergibt 0 zum Beispiel. Wenn Sie einen booleschen Wert erwarten, versuchen Sie: '!! 0 && true' – ftor

+0

@ LUH3417 In der Tat. Aber beide werden sich in einem 'if()' genau so verhalten, was die Frage war. –

-3

Double ! (!!) ist kein Operator. Es ist nur ! zweimal - doppelte Negation.

+0

Aber warum genau hier verwenden? Es ist nicht so, als würde es einer Variablen zugewiesen, die du garantieren willst, ist ein Bool. –

+1

Wie beantwortet das die Frage? JFYI, die Frage ist nicht "Was ist das' !! 'Operator und was macht es?". –

-2

Doppelte Negation ist ein bisschen ein hacky Weg (IMHO), um eine Variable in bool umzuwandeln. Verwenden Sie ! auf Variable erzwingt es zu einem Bool und negiert es, und verwenden Sie es erneut konvertieren Sie es wieder auf den "richtigen" Wert. Also !!0 === false

Wie von James erwähnt, gibt es keinen Grund, dies innerhalb einer if-Anweisung zu tun. Der einzige Grund, wirklich, dies zu tun wäre, um einen bool zur Protokollierung zu zwingen, oder ähnlich, so protokolliert der Wert true oder false statt 0, eine leere Zeichenfolge etc

+0

Was ist der Unterschied zwischen 'if (0)' und 'if (!! 0)' –

+0

@SergioTulentsev Es gibt keinen Unterschied, denn 'if' erzwingt den Wert trotzdem. – Anduril

+1

Dies war mein Versuch zu deuten, dass Ihre Antwort die eigentliche Frage nicht beantwortet. –

0

Nein, im Falle eines if ist das normalerweise kein Grund, das in JS zu schreiben.

Ich würde es nicht als schlechte Praxis bezeichnen, da es oft von Programmierern kommen kann, die aus stark typisierter Sprache kommen, und es ist ein gebräuchlicher schneller Weg, die Konvertierung in diese Sprache zu boolen.

Es kann auch verwendet werden, um die Bedeutung der Wahrheitlichkeit des Wertes in einer langen zu betonen, wenn und zeigen Sie den Programmierer nicht vergessen, die Bedingung zu setzen.

TL: DR: Für viele Dinge: Es mag keine gute Übung sein, aber es wird nur eine schlechte Übung, wenn dein Team diese Übung nicht gewohnt ist, sie trainieren, dokumentieren oder verlassen.

Verwandte Themen