Domanda

Ci sono alcuni modi per fare questo in javascript.

Tutto e di più leggibili e flessibile è probabilmente:

if (a){
    //b
}
else {
    //c
}

Qualcos'altro che funziona con l'assegnazione ed è meno leggibile è:

var foo = 'c';
if (a){
    foo = 'b';
}

La mia domanda principale, però, è circa gli ultimi due metodi che posso pensare:

var foo = a ? b : c;

var foo = a && b || c;

Ci sono differenze tra queste due espressioni?Diversa la leggibilità che sia la mancanza.

*anche se potrebbe assegnare foo una funzione, quindi eseguire dopo l'istruzione if.

È stato utile?

Soluzione

Supponiamo che:

var a = false, b = '', c = 'bar';

Quindi:

var foo = a ? b : c; // foo == ''
var foo = a && b || c; // foo == 'bar'

I due non sono equivalenti; non si dovrebbe mai utilizzare gli operatori booleani al posto del operatore condizionale. Come altri answerers, anche io sono del parere che l'operatore condizionale non manca la leggibilità per semplici espressioni.

Altri suggerimenti

L'operatore ternario è certamente leggibile per me. Anche moreso che il primo esempio, in quanto conciso, il codice logica è sempre più facile da capire che molte righe di codice di controllo che fanno la stessa cosa.

Io non sono d'accordo il primo manca di leggibilità purché lo stesso sia utilizzato correttamente, IOW a, b e c sono semplici espressioni di se stessi.Questo operatore non avere abusato anche se in circostanze non conviene.

Allo stesso modo la seconda espressione, con il risultato pippo come qualcosa di diverso da un booleano, non sarebbe buono.Utilizzando gli operatori booleani per tornare camere non-valori booleani, perché quello è il loro modo di lavorare è solo fonte di confusione.Tuttavia, come una espressione booleana ragionevole.

var foo = a ? b : c;    // foo is b when a is true else c.
var foo = a && b || c;  // foo is true if a and b are true or c is true.

Non si restituiscono lo stesso risultato di quest'ultima è un'espressione booleana, non si utilizza un operatore ternario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top