Lesson 4/9 7 min

Conditions and loops

Make decisions with if/else, compare with ===, and loop through data with for, forEach, map and filter.

FR EN

if / else if / else

Les conditions permettent à votre code de prendre des décisions. C'est le cerveau de votre programme :

const age = 18;

if (age >= 18) {
  console.log("Majeur");
} else if (age >= 16) {
  console.log("Presque majeur");
} else {
  console.log("Mineur");
}

Le code entre { } ne s'exécute que si la condition est vraie.

Comparaisons et logique

Opérateurs de comparaison :

  • === : égal (type et valeur). Toujours utiliser celui-ci
  • !== : différent
  • <, >, <=, >= : inférieur, supérieur

Opérateurs logiques :

  • && : ET (les deux doivent être vrais)
  • || : OU (au moins un doit être vrai)
  • ! : NON (inverse le résultat)

L'opérateur ternaire est un raccourci pour if/else :

const statut = age >= 18 ? "Majeur" : "Mineur";

Les boucles

Les boucles répètent un bloc de code plusieurs fois :

// Boucle for classique
for (let i = 0; i < 5; i++) {
  console.log("Tour " + i);
}

// Boucle while
let compteur = 0;
while (compteur < 3) {
  console.log(compteur);
  compteur++;
}

Méthodes de tableau : forEach, map, filter, find

En pratique, on utilise rarement for directement. Les méthodes de tableau sont plus élégantes :

const notes = [12, 18, 7, 15, 9, 20];

// forEach : exécuter du code pour chaque élément
notes.forEach((note) => console.log(note));

// map : transformer chaque élément
const doublees = notes.map((n) => n * 2);

// filter : garder ceux qui passent le test
const bonnes = notes.filter((n) => n >= 10);

// find : trouver le premier qui passe le test
const premiere = notes.find((n) => n >= 15);

if / else if / else

Conditions let your code make decisions. It's the brain of your program:

const age = 18;

if (age >= 18) {
  console.log("Adult");
} else if (age >= 16) {
  console.log("Almost adult");
} else {
  console.log("Minor");
}

The code between { } only runs if the condition is true.

Comparisons and logic

Comparison operators:

  • === — equal (type and value). Always use this one
  • !== — not equal
  • <, >, <=, >= — less than, greater than

Logical operators:

  • && — AND (both must be true)
  • || — OR (at least one must be true)
  • ! — NOT (inverts the result)

The ternary operator is a shortcut for if/else:

const status = age >= 18 ? "Adult" : "Minor";

Loops

Loops repeat a block of code multiple times:

// Classic for loop
for (let i = 0; i < 5; i++) {
  console.log("Round " + i);
}

// While loop
let counter = 0;
while (counter < 3) {
  console.log(counter);
  counter++;
}

Array methods: forEach, map, filter, find

In practice, you rarely use for directly. Array methods are more elegant:

const grades = [12, 18, 7, 15, 9, 20];

// forEach — run code for each element
grades.forEach((grade) => console.log(grade));

// map — transform each element
const doubled = grades.map((n) => n * 2);

// filter — keep those that pass the test
const passing = grades.filter((n) => n >= 10);

// find — find the first one that passes
const first = grades.find((n) => n >= 15);
Essayez vous-même
Avec l'IA

Copiez ce prompt dans Claude ou ChatGPT :

Explique-moi la différence entre == et === en JavaScript avec 3 exemples piégeux où == donne un résultat surprenant.
Ré-explique sans regarder

Sans relire la réponse de l'IA : avec tes mots, pourquoi "5" == 5 vaut true alors que "5" === 5 vaut false ?

Une bonne explication dit : == est l'égalité permissive, elle convertit d'abord les types (coercition) avant de comparer, donc la chaîne "5" devient le nombre 5 et les deux deviennent égaux. === est l'égalité stricte : pas de conversion, elle compare type ET valeur, et string n'est pas number, d'où false. Réflexe pro : toujours === pour éviter ces conversions invisibles.
Exercice : Corrigez le code de l'IA

L'IA a utilisé == au lieu de ===. Remplacez == par === pour une comparaison stricte.

Corrigez le code
Accepter ou rejeter le code de l'IA

Tu demandes à l'IA « double chaque note ». Voici son code. Ton rôle de relecteur : l'accepter tel quel ou le rejeter, et dire pourquoi.

const notes = [12, 18, 7];
const doublees = [];
for (let i = 0; i <= notes.length; i++) {
  doublees.push(notes[i] * 2);
}
console.log(doublees);
À rejeter : il y a un bug classique d'off-by-one. La condition i <= notes.length fait un tour de trop : à i = 3, notes[3] vaut undefined, et undefined * 2 donne NaN. Le résultat est [24, 36, 14, NaN]. Il faut i < notes.length (strictement inférieur). Et même corrigé, un dev senior préfèrera notes.map((n) => n * 2) : plus court, sans index à gérer, sans risque d'off-by-one.
Rappel libre

Sans remonter dans la leçon : à quoi servent respectivement map, filter et find, et que renvoie chacun (un tableau ? un seul élément ?) ?

map transforme chaque élément et renvoie un nouveau tableau de même taille. filter sélectionne les éléments qui passent un test et renvoie un nouveau tableau (souvent plus petit). find cherche le premier élément qui passe le test et renvoie cet élément seul (pas un tableau), ou undefined si aucun ne correspond.
Pourquoi utiliser === plutôt que == ?
Que retourne [1,2,3].filter(n => n > 1) ?
Que fait && (ET logique) ?
Quelle méthode transforme chaque élément d'un tableau ?
Next step

Conditions and loops give you a program's full logic. Until now this code ran in a void, showing nothing on screen. The next lesson finally connects it to the page: the DOM, that living representation of your HTML that JavaScript can read and change.

Lesson 5: The DOM →
Besoin d'un développeur pour votre projet ?

Réponse sous 24h · Sans engagement