2016-01-10 33 views
13

C'è qualche differenza significativa trauna riga se vs && in JavaScript

condition && console.log("this may run"); 

e

if (condition) console.log("this may run); 

In caso contrario, che è una pratica migliore?

+0

Correlato: * [Istruzione singola riga 'if' - sintassi ottimale, questa alternativa?] (Http: // stackoverflow.it/questions/8860654/javascript-single-line-if-statement-best-syntax-this-alternative/8860674 # 8860674) * –

+1

È molto raro usare '&&' se non si assegna l'espressione a qualcosa. – Sulthan

risposta

7

Si dovrebbe usare il secondo.

Il tuo codice dovrebbe dire cosa significa. Questo è ciò che si intende con la scrittura di codice "semantico". Se stai scrivendo una condizione if, allora dovresti usare l'istruzione if, perché è a questo che serve. Il && è, semanticamente, un logico e, che dovrebbe essere utilizzato nei casi in cui si è interessati al valore logico risultante dalla congiunzione logica di due valori.

Scrivere codice semantico, come suggerito da altre risposte, semplifica la scrittura, la comprensione e la manutenzione. Per quanto riguarda questo commento:

Se qualcun altro potrebbe aver bisogno di leggerlo o mantenerlo, quindi utilizzare il secondo.

Ricorda che "sei mesi da adesso" è "qualcun altro".

Ecco alcuni motivo specifico per l'utilizzo di if quando si intende if:

  1. Se si desidera aggiungere una clausola else, si può semplicemente aggiungerlo. Se hai scritto a && b allora dovrai riscriverlo come a ? b : c.

  2. Supponendo di aver utilizzato parentesi graffe, come in if (a) { b; }, è possibile aggiungere facilmente un altro passaggio al corpo, scrivendo if (a) { b; c; }. Se avessi scritto a && b, allora dovresti riscriverlo come a && (b, c) o qualcosa di equivalente; questo non sarà nemmeno possibile in alcuni casi, se c non può funzionare come espressione.

  3. Alcuni linters (ragionevolmente) si lamentano di a && b.

Nota che minifiers in genere convertire il vostro secondo esempio nella prima, quindi se il vostro razionale per l'utilizzo && è quello di salvare byte, che verranno salvate in ogni caso dal minifier.

13

Non c'è alcuna differenza in quanto tale, ma si può dire che la prima è la notazione abbreviata di quella successiva.

Suggerisco di utilizzare la condizione successiva, rende il codice più spiegabile, producendo gli stessi risultati e con lo stesso numero di caratteri.

+1

Ma c'è ** una differenza, per definizione, in una varietà di aspetti, con la sola eccezione del comportamento. –

4

Se solo è possibile mantenere il codice, utilizzare quello desiderato.

Se qualcun altro potrebbe aver bisogno di leggerlo o mantenerlo, quindi utilizzare il secondo.