2013-05-12 3 views
0

Il est un peu difficile à expliquer, mais je veux faire quelque chose qui ressemble à ceci:Comment avoir plusieurs « et » les opérateurs logiques et un « ou » opérateur logique

if(a === 4 && b === true && c === "words" || "numbersandwords")DoSomething(); 

mais il se termine en cours d'exécution sans lui correspondant les premiers opérateurs. Je veux savoir comment avoir le dernier opérateur sauf 2 entrées différentes tout en m'assurant que les autres critères sont remplis avant de courir.

Répondre

1

Vous avez juste besoin d'utiliser des parenthèses, par exemple .:

if(a == 4 && b == true && (c == "words" || c == "numbersandwords")) { DoSomething(); } 
1

Utilisez simplement quelques parenthèses pour séparer vos pièces or et les pièces and, et ajoutez le c === avant la dernière chaîne. Sans cette partie d'égalité à la fin, la chaîne 'numbersandwords' équivaut toujours à true.

if(a === 4 && b === true && (c === "words" || c === "numbersandwords")){ 
    DoSomething(); 
} 
0

En JavaScript, comme les autres langues, tous les opérateurs (comme && et ||) a une precendence qui détermine l'ordre dans lequel il est évalué. && a une priorité plus élevée que ||, donc il est évalué en premier. Par conséquent, chaque terme sur la gauche est and ensemble. Même s'ils sont tous faux, le résultat global est vrai car il est or édité avec "numbersandwords", ce qui donne la valeur true (comme le fait everything except 0, -0, null, false, NaN, undefined, or the empty string). La première chose que vous devez faire est de comparer quelque chose (vraisemblablement c). Ensuite, vous pouvez modifier l'ordre d'évaluation utilisant des parenthèses, qui a une priorité plus élevée que toute autre chose:

if(a === 4 && b === true && (c === "words" || c === "numbersandwords")) DoSomething(); 

Vous pouvez briser le test en plusieurs if déclarations si vous pouvez éventuellement faire quelque chose de légèrement différent en fonction la valeur de c (ou il exprime juste mieux votre intention):

if(a === 4 && b === true) 
{ 
    if(c === "words" || c === "numbersandwords") 
    { 
     DoSomething(); 
    } 
} 
Questions connexes