Une seule condition ne suffit pas toujours : un utilisateur doit être majeur et avoir un billet, un joueur gagne avec un gros score ou un bonus. Les opérateurs logiques &&, || et ! permettent de combiner plusieurs tests dans une seule condition.
| Opérateur | Lecture | Vrai quand… |
|---|---|---|
&& |
ET | les deux conditions sont vraies |
|| |
OU | au moins une condition est vraie |
! |
NON | la condition est fausse (négation) |
&& — ET (les deux à la fois)let age = 20;
let aBillet = true;
if (age >= 18 && aBillet) {
console.log("Entrée autorisée");
}
Lecture : "si l'âge est ≥ 18 et que la personne a un billet, alors..."
Si une seule des deux conditions est fausse, le tout est faux.
condition 1 ET condition 2
vrai vrai
\ /
résultat : vrai
|| — OU (au moins une)let role = "admin";
let age = 17;
if (role === "admin" || age >= 18) {
console.log("Accès autorisé");
}
Lecture : "si l'utilisateur est admin ou qu'il est majeur..."
Il suffit qu'une seule condition soit vraie. Les deux peuvent l'être aussi, ça reste vrai.
! — NON (négation)! inverse une valeur booléenne : !true devient false, et inversement.
let estConnecte = false;
if (!estConnecte) {
console.log("Veuillez vous connecter");
}
Lecture : "si non connecté..."
! se lit souvent comme "pas" ou "non" devant la variable.
On peut chaîner autant d'opérateurs que nécessaire. Les parenthèses rendent la logique explicite :
let age = 20;
let aBillet = true;
let estVIP = false;
if ((age >= 18 && aBillet) || estVIP) {
console.log("Entrée autorisée");
}
Lecture : "un VIP entre toujours ; sinon il faut être majeur et avoir un billet."
Conseil : dès qu'on combine && et ||, mets des parenthèses. Sans elles, && a priorité sur || (comme * sur + en maths) — c'est une source classique de bugs. Les parenthèses ne coûtent rien et rendent l'intention évidente.
JavaScript évalue les conditions de gauche à droite et s'arrête dès qu'il connaît le résultat :
if (utilisateur && utilisateur.nom === "Alice") {
// ...
}
Si utilisateur est null ou undefined, la première partie est fausse, et la deuxième n'est pas évaluée. Sans cela, on aurait une erreur en lisant .nom sur null.
C'est une astuce courante : tester l'existence avant d'utiliser une propriété.
let role = "membre";
let estActif = true;
let estBanni = false;
if ((role === "admin" || role === "membre") && estActif && !estBanni) {
console.log("Accès autorisé");
}
let email = "alice@example.com";
let motDePasse = "secret123";
if (email !== "" && motDePasse.length >= 8) {
console.log("Formulaire valide");
} else {
console.log("Champs manquants ou trop courts");
}
let score = 150;
let aPotion = true;
let aClef = false;
// On accède au boss si on a un gros score, OU si on a une potion ET une clef
if (score >= 200 || (aPotion && aClef)) {
console.log("Boss débloqué !");
}
&& = ET — vrai si toutes les conditions sont vraies.|| = OU — vrai si au moins une condition est vraie.! = NON — inverse vrai/faux.&& et ||, toujours des parenthèses.