2014-06-12 24 views
9

Il collaboratore mi ha chiesto grep per la stringa "true: false" attraverso il nostro progetto e ho trovato molti operatori ternari che restituivano esplicito vero o falso. Ad esempio:Operatori ternari che restituiscono "true: false". Perché?

return this.state == Cursor.CLOSED ? true : false; 

Non solo nel nostro progetto, ma molti moduli/librerie fanno questo. Mi sembra superfluo per me, dal momento che l'autore avrebbe potuto appena scritto in questo modo:

return this.state == Cursor.CLOSED; 

È codifica difensiva contro alcuni Gotcha in Javascript? O solo per essere esplicito con quello che stai tornando?

+3

che sembra restituire semplicemente true se lo stato è chiuso? [Cosa c'è di sbagliato in questo] (http://msdn.microsoft.com/en-us/library/ie/be21c7hw (v = vs.94) .aspx)? La tua domanda è molto poco chiara. – Liam

+3

Penso che stia chiedendo che potrebbe essere solo 'return this.state == Cursor.CLOSED;' – Vic

+1

Per me sembra non necessario, se 'this.state == Cursor.CLOSED' è già vero? – adeneo

risposta

6

È una codifica difensiva contro qualche trucco in Javascript?

No. == restituisce sempre un valore booleano.

Il condizionale è completamente ridondante e considerato una cattiva pratica. Simplify it!

+0

Inoltre, se devi convertire in booleano in javascript, il modo più semplice per farlo è negarlo due volte "!! nonBool'. –

3

Non è necessario, ma è un errore piuttosto comune † in molte lingue. Poiché l'operatore di uguaglianza viene utilizzato quasi esclusivamente in condizioni, alcuni programmatori meno esperti non lo sanno e i programmatori più esperti occasionalmente dimenticano che può essere effettivamente utilizzato per il suo valore. Non c'è mai stata un'implementazione JavaScript importante che abbia avuto un problema che lo rendesse necessario.

† "Errore" si sente scortese qui, dal momento che il codice è corretto, solo inutilmente prolisso. Ma penso che tu sappia cosa intendo.

Problemi correlati