66 votes

Comment tester si une variable n'est égale à aucune des deux valeurs ?

Je souhaite écrire une instruction if/else qui teste si la valeur d'une entrée de texte n'est PAS égale à l'une ou l'autre de deux valeurs différentes. Comme ceci (excusez mon code en pseudo-anglais) :

var test = $("#test").val();
if (test does not equal A or B){
    do stuff;
}
else {
    do other stuff;
}

Comment écrire la condition de l'instruction if à la ligne 2 ?

152voto

Pensez à ! (opérateur de négation) comme "not", || (opérateur booléen-or) comme "ou" et && (opérateur booléen-et) comme "et". Voir Opérateurs y Priorité de l'opérateur .

Ainsi :

if(!(a || b)) {
  // means neither a nor b
}

Cependant, l'utilisation de La loi de Morgan On pourrait l'écrire comme suit

if(!a && !b) {
  // is not a and is not b
}

a y b ci-dessus peut être n'importe quelle expression (telle que test == 'B' ou ce qu'il faut).

Une fois de plus, si test == 'A' y test == 'B' sont les expressions, notez l'expansion de la 1ère forme :

// if(!(a || b)) 
if(!((test == 'A') || (test == 'B')))
// or more simply, removing the inner parenthesis as
// || and && have a lower precedence than comparison and negation operators
if(!(test == 'A' || test == 'B'))
// and using DeMorgan's, we can turn this into
// this is the same as substituting into if(!a && !b)
if(!(test == 'A') && !(test == 'B'))
// and this can be simplified as !(x == y) is the same as (x != y)
if(test != 'A' && test != 'B')

83voto

CESCO Points 3210

Réponse de l'ECMA2016, particulièrement utile lors de la vérification de plusieurs valeurs :

if (!["A","B", ...].includes(test)) {}

6 votes

C'est la façon JavaScript de répondre à la question. Il ne demandait pas comment utiliser && ou || mais il cherchait un raccourci qui permette ; test == ('string1' || string2) qui serait équivalent à (test == 'string2') || (test == string1)

0 votes

Voici une référence ancienne mais pertinente ; tjvantoll.com/2013/03/14/…

12voto

James Montagne Points 44517

En général, il s'agirait de quelque chose comme ceci :

if(test != "A" && test != "B")

Vous devriez probablement vous renseigner sur les opérateurs logiques en JavaScript.

3voto

hev1 Points 6033

Pour un grand nombre de valeurs qui font l'objet de vérifications fréquentes, il peut s'avérer plus efficace de vérifier si la valeur n'existe pas dans un fichier Set .

const values = new Set(["a", "b"]);
if(!values.has(someValue)){
    // do something
} else {
    // do something else
}

2voto

Zlatev Points 2445

Je le fais en utilisant jQuery

if ( 0 > $.inArray( test, [a,b] ) ) { ... }

0 votes

Si quelqu'un continue à obtenir des résultats indésirables avec cette méthode, vous pouvez également vérifier que le typeof du test et a, b doivent correspondre si vous avez besoin d'obtenir true comme résultat.

3 votes

Je ne suis pas du tout fan de ce système, qui semble beaucoup plus facile à tester. (test != 'A' && test != 'B') et la lecture est plus agréable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X