JavaScript se alternativa [duplicato]
-
18-09-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Che cosa significa questo pezzo di codice indicano? So che è una sorta di sintassi alternativa if
...
pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0'
Aggiornamento:
Qual è la necessità di questo tipo di codifica? Questo è più efficiente o semplicemente una versione abbreviata con la stessa efficienza?
Soluzione
E 'il condizionale operatore, è equivalente a qualcosa in questo modo:
if (pattern.Gotoccurance.score != null) {
pattern.Gotoccurance.score;
} else {
'0';
}
Ma credo che un'istruzione di assegnazione non è presente nel codice che avete inviato, in questo modo:
var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0';
La variabile score
sarà assegnato se pattern.Gotoccurance.score
non è nullo:
var score;
if (pattern.Gotoccurance.score != null) {
score = pattern.Gotoccurance.score;
} else {
score = '0';
}
Un modello comune per fare questo tipo di incarichi 'valore di default' in JavaScript è quello di utilizzare l'operatore logico OR (||
):
var score = pattern.Gotoccurance.score || '0';
Il valore di pattern.Gotoccurance.score
verrà assegnato alla variabile score
solo se tale valore non è falsy (valori falsy sono false
, null
, undefined
, 0
, stringa di lunghezza zero o NaN
).
In caso contrario, se è sarà assegnato '0'
falsy.
Aggiornamento: La performance sarà equivalente, si dovrebbe concentrarsi sulla leggibilità, cerco di usare l'operatore ternario su espressioni che sono molto semplici, e si può anche migliorare la formattazione, dividendolo in due righe per renderlo più leggibile:
var status = (age >= 18) ? "adult"
: "minor";
domanda correlati:
Altri suggerimenti
Questa è una operatore ternario , un modo shorthanded da fare se le dichiarazioni.
Se ri-scritto, sarebbe simile a questa:
if (pattern.Gotoccurance.score != null) {
return pattern.Gotoccurance.score;
} else {
return '0';
}
Si chiama l'operatore ternario.
In risposta alla aggiornamento domanda: "Perché hanno bisogno per questo tipo di codifica?"
A volte è possibile utilizzare l'operatore ternario per ridurre la complessità:
Per esempio, ho una pagina web che aveva bisogno di verificare che almeno due su tre campi di testo specifici avevano valori inseriti. Il caso / logica altro sembrava abbastanza brutto, ma l'operatore ternario ha reso un one-liner per determinare quanti campi sono stati compilati:
var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
(lastName.length > 0 ? 1 : 0) +
(zipCode.length > 0 ? 1 : 0) );
if (numberFilledInFields < 2)
{
validation = false;
return;
}
Questa soluzione appare abbastanza elegante e facile da leggere che alcune alternative.
E 'ternario operator / operatore condizionale.
In matematica, un operazione ternaria è un'operazione n-ario con n = 3. un'operazione ternario su un insieme a richiede alcuna somministrati tre elementi di a e li combina per formare un unico elemento di a.
è una forma breve mano di if..else
es. vuole scoprire se un numero è pari o no
// Utilizzando l'approccio if..else
function CheckEvenOdd()
{
var number = 2;
if(number %2 == 0) alert("even");else alert("odd");
}
// utilizzando ternario
function CheckEvenOdd()
{
var number = 2;
alert((number %2 == 0)?"even":"odd");
}
Un'altra variante è interruttore
// utilizzando l'interruttore
function CheckEvenOdd()
{
var number = 2;
switch(number %2)
{
case 0:alert("even");break;
default:alert("odd");break;
}
}
Ora, se si dispone di una semplice condizione di if..else per eseguire come quello descritto, si può andare avanti con ternario.
Ma se il controllo condizionale diventa complesso, andare sia con if..else o switch come leggibilità sarà perso in ternario
es. è facile da eseguire minimo o massimo di due numeri utilizzando un operatore ternario ma diventa maldestro di trovare la più grande e secondo per estensione tra 3 o più numeri e non è nemmeno raccomanda di applicare. E 'meglio usare if..else invece