JavaScript se alternativo

Cosa rappresenta questo bit di codice? So che è una specie di syntax alternativa …

 pattern.Gotoccurance.score != null ? pattern.Gotoccurance.score : '0' 

Aggiornare:

Qual è la necessità di questo tipo di codifica? È più efficiente o solo una versione abbreviata con la stessa efficienza?

È l’operatore condizionale , è equivalente a qualcosa del genere:

 if (pattern.Gotoccurance.score != null) { pattern.Gotoccurance.score; } else { '0'; } 

Ma penso che nel codice che hai postato manchi una dichiarazione di assegnazione, come questa:

 var score = pattern.Gotoccurance.score !=null ? pattern.Gotoccurance.score : '0'; 

La variabile score sarà assegnata se pattern.Gotoccurance.score non è nullo:

 var score; if (pattern.Gotoccurance.score != null) { score = pattern.Gotoccurance.score; } else { score = '0'; } 

Un modello comune per eseguire questo tipo di assegnazioni di “valore predefinito” in JavaScript consiste nell’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 (i valori falsy sono false , null , undefined , 0 , stringa di lunghezza zero o NaN ).

Altrimenti, se è falsato '0' verrà assegnato '0' .

Aggiornamento: Le prestazioni saranno equivalenti, dovresti concentrarti sulla leggibilità, cerco di usare l’operatore ternario su espressioni molto semplici e puoi anche migliorare la formattazione, dividendola in due righe per renderla più leggibile:

 var status = (age >= 18) ? "adult" : "minor"; 

Domanda relativa:

  • A ternario o non a ternario?

Questo è un operatore ternario , un modo per fare in modo abbreviato le affermazioni.

Se riscritto, sarebbe simile a questo:

 if (pattern.Gotoccurance.score != null) { return pattern.Gotoccurance.score; } else { return '0'; } 

Si chiama operatore ternario.

Rispondendo all’aggiornamento delle domande “Perché è necessario questo tipo di codifica?”

A volte è ansible utilizzare l’operatore ternario per ridurre la complessità:

Ad esempio, ho una pagina web che doveva verificare che almeno due dei tre campi di testo specifici avessero inserito valori. La logica if / else sembrava piuttosto brutta, ma l’operatore ternario ne fece un one-liner per determinare quanti campi erano 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 rispetto ad alcune alternative.

È operatore ternario / operatore condizionale.

In matematica, un’operazione ternaria è un’operazione n-a con n = 3. Un’operazione ternaria su un insieme A prende ogni dato tre elementi di A e li combina per formare un singolo elemento di A.

è una forma di mano corta di if..else

ad esempio, voglio scoprire se un numero è pari o meno

// Usando l’approccio if..else

 function CheckEvenOdd() { var number = 2; if(number %2 == 0) alert("even");else alert("odd"); } 

// usando ternario

 function CheckEvenOdd() { var number = 2; alert((number %2 == 0)?"even":"odd"); } 

Un’altra variante è l’interruttore

// usando 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, se … else, per eseguire come quella descritta, si può procedere con ternario.

Ma se il controllo condizionale diventa complesso, vai con if..else o cambia perché la leggibilità andrà persa in ternario

ad esempio è facile eseguire il minimo o il massimo di due numeri usando un operatore ternario ma diventa maldestro per trovare il più grande e il secondo più grande tra 3 o più numeri e non è nemmeno consigliato. È meglio usare if..else invece