2013-03-11 13 views
13

Quindi, un programmatore junior mia squadra oggi ha scritto il seguente pezzo di codice:controllando un valore variabile mediante un operatore o

if(status === ("incomplete" || "unknown")) 

che ovviamente non è intenzione di fare ciò che intendeva, che era questo:

if(status === "incomplete" || status === "unknown")) 

Ma quello che non riesco a spiegare è perché esattamente il primo snippet di codice non funzionerebbe! O perché si restituisce vero se 'status' è impostato su 'incompleta', ma su false quando è impostato su 'sconosciuto' ...

risposta

20

In JavaScript, l'operatore || restituisce il suo primo operando, se restituisce true (vale a dire non è false, , undefined, "" o 0) e il suo secondo operando in caso contrario.

Nel primo caso, ("incomplete" || "unknown") viene sempre valutato a "incomplete", poiché viene valutato true.

L'intera condizione diventa quindi:

if (status === "incomplete") 

che spiega il comportamento che si sta osservando.

+0

+1 - eri 9 secondi più veloce con una risposta completamente formata. Wow. – insertusernamehere

+2

"... restituisce il suo primo operando se valuta" vero "..." Io lo cambierei per dire "restituisce il suo primo operando se è vero", la tua parentesi fondamentalmente lo spiega, ma "verità" e "falso" "sono le parole più comunemente usate per esprimere questo concetto. – zzzzBov

+0

Normalmente uso le parole "verità" e "falso", anche se ho scoperto che di solito confondono i nuovi arrivati. Ma sì, è proprio quello che intendo. –

6

("incomplete" || "unknown") restituirà "incomplete" che è rispetto a status.

3

Ma quello che non riesco a spiegare è il motivo esattamente status === ("incomplete" || "unknown") non avrebbe funzionato

Ecco perché l'espressione tra parentesi viene valutata per prima. La stringa non vuota incomplete è veritiera, pertanto lo OR-expression("incomplete" || "unknown") produce "incomplete" e viene confrontato solo con la variabile status.

Per accorciare la condizione, there are many ways compresi gli array di valori, di test delle espressioni regolari, ecc

Problemi correlati