Question

    

Cette question a déjà une réponse ici:

    
            
  •              marque Question et deux points en JavaScript                                      7 réponses                          
  •     
    

Qu'est-ce que peu de code représentent? Je sais qu'il est une sorte de syntaxe alternative if ...

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

Mise à jour:

Quelle est la nécessité de ce type de codage? Est-ce plus efficace ou tout simplement une version raccourcie avec la même efficacité?

Était-ce utile?

La solution

Il est conditionnelle l'opérateur, il est équivalent à quelque chose comme ceci:

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

Mais je pense qu'une déclaration d'affectation est manquante dans le code affiché, comme ceci:

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

La variable score sera attribué si pattern.Gotoccurance.score est non nulle:

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

Un modèle commun pour faire ce genre d'affectations « valeur par défaut » dans JavaScript est d'utiliser l'opérateur logique OU (||):

var score = pattern.Gotoccurance.score ||  '0';

La valeur de pattern.Gotoccurance.score sera affectée à la variable de score seulement si cette valeur est falsy (valeurs falsy sont false, null, undefined, 0, chaîne de longueur nulle ou NaN).

Dans le cas contraire, si elle est '0' falsy sera attribué.

Mise à jour: La performance sera équivalent, vous devriez vous concentrer sur la lisibilité, je tente d'utiliser l'opérateur ternaire sur les expressions qui sont très simples, et vous pouvez également améliorer la mise en forme, la divisant en deux lignes pour le rendre plus lisible:

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

question connexe:

Autres conseils

Ceci est un opérateur ternaire , une façon de faire en désavantage numérique si les déclarations.

Si réécrite, il ressemblerait à ceci:

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

Il est appelé l'opérateur ternaire.

En réponse à la mise à jour de la question: « Pourquoi le besoin de ce type de codage? »

Vous pouvez parfois utiliser l'opérateur ternaire pour réduire la complexité:

Par exemple, j'ai une page Web qui avait besoin pour vérifier que au moins deux des trois champs de texte spécifiques avaient des valeurs entrées. If / logique autre avait l'air assez laid, mais l'opérateur ternaire fait une seule ligne pour déterminer le nombre de champs ont été remplis:

var numberFilledInFields = ( (firstName.length > 0 ? 1 : 0) +
                     (lastName.length > 0 ? 1 : 0) +
                     (zipCode.length > 0 ? 1 : 0) );

if (numberFilledInFields < 2)
{
    validation = false;
    return;
}

Cette solution apparaît tout à fait élégante et facile à lire que certaines alternatives.

Il est opérateur ternaire / opérateur conditionnel.

En mathématiques, un opération ternaire est une opération n-aire avec n = 3. une opération ternaire dans un ensemble a prend des données de trois éléments a et les combine pour former un seul élément de a.

il est une forme de sténographie de if..else

par exemple. voulez savoir si un nombre est pair ou pas

// Utilisation de l'approche if..else

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

// en utilisant ternaire

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

Une autre variante est commutateur

// en utilisant le commutateur

function CheckEvenOdd()
{
    var number = 2;
    switch(number %2)
    {
        case 0:alert("even");break;
        default:alert("odd");break;
    }
}

Maintenant, si vous avez une condition simple de if..else pour effectuer comme celui décrit, vous pouvez aller de l'avant avec ternaire.

Mais si la vérification conditionnelle devient complexe, aller soit avec if..else ou interrupteur lisibilité sera perdu dans ternaire

par exemple. il est facile d'effectuer minimum ou maximum de deux chiffres à l'aide d'un opérateur ternaire, mais devient maladroit pour trouver le plus grand et le deuxième plus grand parmi les 3 numéros ou plus et même pas recommmended. Il est préférable d'utiliser à la place if..else

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top