2012-01-16 8 views
63

so che in PHP 5.3 invece di utilizzare questo ridondante sintassi operatore ternario:Javascript stenografia operatore ternario

startingNum = startingNum ? startingNum : 1 

... possiamo usare una sintassi ridotta per i nostri operatori ternari se del caso:

startingNum = startingNum ?: 1 

E so circa l'operatore ternario in JavaScript:

startingNum = startingNum ? startingNum : 1 

... ma c'è uno shortha ND?

Grazie ragazzi!

risposta

102
var startingNumber = startingNumber || 1; 

Qualcosa del genere quello che stai cercando, dove è predefinito se non definito?

var foo = bar || 1; // 1 
var bar = 2; 
foo = bar || 1;  // 2 

proposito, questo funziona per un sacco di scenari, compresi gli oggetti:

var foo = bar || {}; // secure an object is assigned when bar is absent 
+1

Penso che sia C# –

+0

infatti, stati rimbalzare questa mattina. Risolto, ma grazie per aver notato. –

+1

Non intendete '||' invece di '??'? –

13

|| restituisce il primo valore truthy incontra, e può quindi essere utilizzato come operatore coalescenza, simile a C# 's ??

startingNum = startingNum || 1; 
+0

@Web_Designer - nessun problema. –

+0

Mi piace la tua spiegazione più delle altre – ajax333221

+0

@ ajax333221 - grazie! –

10

Sì, c'è:

var startingNum = startingNum || 1; 

In generale, expr1 || expr2 opere nel seguente modo (come menzionato da the documentation):

ritorni expr1 se può essere convertito in true; in caso contrario, restituisce expr2. Pertanto, se utilizzato con i valori Boolean, restituisce true se uno degli operandi è true; se entrambi sono false, restituisce false.

+0

Non è più corretto dire "se a è verità" contro "se a è valutato come vero"? – JaredPar

+3

@JaredPar: per evitare ambiguità, ho sostituito la mia spiegazione dettagliata originale con quella di Mozilla Developer Network. Dovrebbe essere meno ambiguo. – Tadeck

1
var startingNum = startingNum || 1; 

In questo caso, è possibile utilizzare l'operatore OR.

0

Le risposte sopra sono corrette. In JavaScript, la seguente dichiarazione:

startingNum = startingNum ? otherNum : 1 

può essere espresso come

startingNum = otherNum || 1 

Un altro scenario non coperti qui è se si desidera che il valore da restituire false quando non corrisponde. La stenografia JavaScript per questo è:

startingNum = startingNum ? otherNum : 0 

Ma può essere espresso come

startingNum = startingNum && otherNum 

Volevo solo per coprire un altro scenario nel caso in cui gli altri erano alla ricerca di una risposta più generalizzata.

0
startingNum = startingNum || 1 

Se si dispone di una condizione con nulla, come

startingNum = startingNum ? startingNum : null 

si può usare '& &'

startingNum = startingNum && startingNum 
0

Per fare un ternario come:

boolean_condition ? true_result : false_result 

in javascript, si può fare:

(boolean_condition && true_result) || false_result; 

Esempio:

(true && 'green') || 'red'; 
=> "green" 
(false && 'green') || 'red'; 
=> "red"