JavaScript si alternative

Que représente ce bit de code? Je sais que c'est une sorte de syntaxe alternative …

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

Mettre à jour:

Quel est le besoin de ce type de codage? Est-ce plus efficace ou simplement une version raccourcie avec la même efficacité?

    C'est l'opérateur conditionnel , cela équivaut à 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 que vous avez posté, comme ceci:

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

    La variable score sera attribuée si pattern.Gotoccurance.score n'est pas nulle:

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

    Un modèle commun pour effectuer ce type d'attribution de "valeur par défaut" dans JavaScript consiste à utiliser l'opérateur OR logique ( || ):

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

    La valeur de pattern.Gotoccurance.score ne sera attribuée à la variable score que si cette valeur n'est pas fausse (les valeurs false sont false , null , undefined , 0 , chaîne de longueur nulle ou NaN ).

    Sinon, si c'est faux '0' sera attribué.

    Mise à jour: la performance sera équivalente, vous devriez vous concentrer sur la lisibilité, j'essaie d'utiliser l'opérateur ternaire sur des expressions très simples, et vous pouvez également améliorer la mise en forme, diviser en deux lignes pour la rendre plus lisible:

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

    Question posée:

    • À Ternary ou Not To Ternary?

    Il s'agit d'un opérateur ternaire , une manière à court terme de faire si des déclarations.

    Si réécrit, il ressemblerait à ceci:

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

    C'est l'opérateur ternaire.

    Répondre à la mise à jour de la question "Pourquoi avoir 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 devait vérifier que au moins deux champs de texte spécifiques sur trois avaient des valeurs entrées. La logique if / else semblait plutôt moche, mais l'opérateur ternaire a fait un one-liner pour déterminer le nombre de champs 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 semble assez élégante et facile à lire que certaines alternatives.

    C'est un opérateur ternaire / opérateur conditionnel.

    En mathématiques, une opération ternaire est une opération n-ary avec n = 3. Une opération ternaire sur un ensemble A prend les trois éléments de A et les combine pour former un seul élément de A.

    C'est une forme courte de if..else

    Par exemple, voulez savoir si un nombre est égal ou non

    // Utilisation de l'approche if..else

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

    // utilisant le ternaire

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

    Une autre variante est l'interruption

    // 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 si … pour fonctionner comme celle décrite, vous pouvez aller de l'avant avec le ternaire.

    Mais si la vérification conditionnelle devient complexe, passez soit si … ou changez, car la lisibilité sera perdue dans le ternaire

    Par exemple, il est facile d'effectuer un nombre minimum ou maximum de deux nombres à l'aide d'un opérateur ternaire, mais devient maladroit de trouver le plus grand et le deuxième plus grand parmi 3 ou plus de nombres et n'est même pas recommandé. Il est préférable d'utiliser si … à la place