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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top