Exercices - JavaScript Moderne

Mettez en pratique ce que vous avez appris ! Ces exercices couvrent tous les concepts essentiels de JavaScript.

Comment travailler efficacement

  • Essayez d'abord : Résolvez chaque exercice sans regarder la solution
  • Testez dans la console : Ouvrez les DevTools (F12) et expérimentez
  • Vérifiez les résultats : Utilisez console.log() pour voir ce que votre code produit
  • Comparez : Regardez ensuite la solution et comprenez les différences
  • L'objectif : Comprendre, pas copier ! Posez-vous "Pourquoi ça marche ?"

💡 Astuce : Les CodePlaygrounds interactifs ci-dessous sont parfaits pour tester rapidement !

Exercice 1 : Variables et types

Exercice : Types et variables

Facile
  1. Créez les variables suivantes avec `const` :

    • `name` : votre prénom (string)
    • `age` : votre âge (number)
    • `isStudent` : true (boolean)
    • `courses` : un tableau avec 3 cours que vous suivez
  2. Utilisez `typeof` pour afficher le type de chaque variable

  3. Créez une variable `score` avec `let`, initialisée à 0, puis modifiez-la à 10, puis ajoutez 5

  4. Essayez de réassigner `name` - que se passe-t-il ?

Exercice 2 : Arrow Functions

Exercice : Convertir en arrow functions

Facile

Convertissez ces fonctions classiques en arrow functions :

javascript
function greet(name) {
return `Bonjour ${name}!`;
}

function add(a, b) {
return a + b;
}

function multiply(a, b) {
return a * b;
}

function square(n) {
return n * n;
}

Bonus : Utilisez le return implicite quand c'est possible !

Exercice 3 : Méthodes de tableaux

Exercice : Manipulation de tableaux

Moyen

Avec ce tableau :

javascript
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  1. Créez un nouveau tableau `evens` contenant seulement les nombres pairs
  2. Créez un tableau `squares` contenant le carré de chaque nombre
  3. Calculez la somme de tous les nombres (utilisez `.reduce()`)
  4. Trouvez le premier nombre supérieur à 5
  5. Vérifiez s'il y a au moins un nombre supérieur à 8
  6. Vérifiez si tous les nombres sont inférieurs à 20

Méthodes à utiliser : `.filter()`, `.map()`, `.reduce()`, `.find()`, `.some()`, `.every()`

💻 🎯 Testez les méthodes de tableaux

💡 Astuce : Modifiez le code ci-dessus et cliquez sur "Exécuter" pour voir le résultat

Exercice 4 : Objets et méthodes

Exercice : Manipulation d'objets

Moyen

Avec ce tableau d'étudiants :

javascript
const students = [
{ id: 1, name: 'Alice', grade: 15 },
{ id: 2, name: 'Bob', grade: 12 },
{ id: 3, name: 'Charlie', grade: 18 },
{ id: 4, name: 'Diana', grade: 9 }
];
  1. Extraire tous les noms dans un tableau
  2. Créer un tableau avec seulement les étudiants ayant une note ≥ 12
  3. Calculer la moyenne des notes
  4. Trouver l'étudiant avec l'ID 3
  5. Vérifier s'il y a au moins un étudiant avec une note inférieure à 10

Exercice 5 : Destructuration

Exercice : Destructuration d'objets et tableaux

Moyen

Avec cet objet et ce tableau :

javascript
const user = {
name: 'Thomas',
age: 30,
city: 'Paris',
country: 'France'
};

const colors = ['red', 'green', 'blue', 'yellow'];
  1. Utilisez la destructuration pour extraire `name` et `age` de `user`
  2. Extrayez `name` en le renommant `userName` et `city` en `userCity`
  3. Extrayez les deux premiers éléments de `colors` dans `first` et `second`
  4. Extrayez le troisième élément de `colors` (ignorez les deux premiers)
  5. Créez une fonction `displayUser` qui prend un objet et utilise la destructuration dans les paramètres pour afficher "Thomas a 30 ans"

Exercice 6 : Spread Operator

Exercice : Spread operator et immutabilité

Moyen
  1. Fusionnez [1, 2, 3] et [4, 5, 6] avec le spread operator
  2. Copiez [1, 2, 3] et ajoutez 4 et 5 (sans modifier l'original)
  3. Copiez cet objet et changez l'âge à 26 (sans modifier l'original) :
javascript
const user = { name: "Alice", age: 25 };
  1. Fusionnez ces deux objets :
javascript
const person = { name: "Bob", age: 30 };
const address = { city: "Paris", country: "France" };
  1. Ajoutez une propriété discount: 10 à cet objet :
javascript
const product = { name: "Laptop", price: 1000 };

Attention

Important : Vérifiez que les originaux ne sont pas modifiés !

Exercice 7 : Template Literals

Exercice : Template literals et interpolation

Facile

Utilisez les template literals (backticks `) pour :

  1. Créer un message : "Bonjour, je m'appelle [nom] et j'ai [age] ans."
  2. Calculer et afficher : "Total: [prix × quantité]€"
  3. Afficher "Résultat: Réussi" si score ≥ 10, sinon "Résultat: Échoué"
  4. Créer un email multi-lignes avec interpolation

Astuce : Utilisez ${expression} pour l'interpolation

Exercice 8 : Combinaison de concepts

Exercice : Projet : Gestion d'une liste de tâches

Difficile

Avec cette liste de tâches :

javascript
const tasks = [
{ id: 1, title: 'Apprendre React', completed: false, priority: 'high' },
{ id: 2, title: 'Faire les courses', completed: true, priority: 'low' },
{ id: 3, title: 'Réviser JavaScript', completed: false, priority: 'high' },
{ id: 4, title: 'Appeler maman', completed: false, priority: 'medium' }
];

Partie 1 : Extraction et filtrage

  1. Extraire tous les titres dans un tableau (utilisez .map())
  2. Filtrer les tâches non terminées (completed: false)
  3. Filtrer les tâches prioritaires (priority: 'high') ET non terminées (combinez deux conditions)

Partie 2 : Immutabilité

  1. Marquer la tâche avec id: 1 comme terminée sans modifier l'original (.map() + spread)
  2. Ajouter cette nouvelle tâche sans modifier l'original (spread operator) :
javascript
const newTask = { id: 5, title: "Faire du sport", completed: false, priority: "medium" };

Partie 3 : Calculs et affichage

  1. Compter le nombre de tâches terminées (.filter() + .length)
  2. Créer un message avec template literal : "Vous avez X tâches, dont Y terminée(s)."

Approche progressive

Cet exercice est complexe ! Résolvez-le étape par étape :

  • Testez chaque partie séparément dans la console
  • Vérifiez que l'original n'est pas modifié (parties 4 et 5)
  • Combinez : .map(), .filter(), spread operator, et template literals

💻 🎯 Projet : Gestion de tâches interactive

💡 Astuce : Modifiez le code ci-dessus et cliquez sur "Exécuter" pour voir le résultat

Exercice 9 : Lecture et validation de code

Compétence essentielle

Savoir lire et comprendre du code est aussi important que savoir l'écrire. C'est crucial quand vous travaillez avec l'IA : vous devez pouvoir valider le code généré, détecter les erreurs, et comprendre ce qu'il fait vraiment.

Exercice : Trouver les bugs dans le code

Moyen

Lisez attentivement les 5 codes suivants. Chacun contient un bug ou une mauvaise pratique.

Pour chaque code :

  1. Identifiez le problème
  2. Expliquez pourquoi c'est un bug
  3. Proposez la correction

Code 1 : Comprendre le comportement de .push()

javascript
const numbers = [1, 2, 3];
const result = numbers.push(4);
console.log(result);  // Que contient result ?
console.log(numbers); // numbers a-t-il changé ?

Questions :

  • Que retourne .push() ? (le tableau ou autre chose ?)
  • Est-ce que numbers est modifié ?
  • Si vous aviez besoin de l'immutabilité, comment feriez-vous ?
  • Quand utiliser .push() vs spread operator ?

Code 2 : Filtrer les utilisateurs adultes

javascript
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 17 },
{ name: 'Charlie', age: 30 }
];

const adults = users.map(u => {
if (u.age >= 18) return u;
});

console.log(adults); // Que contient adults ?

Questions :

  • Quelle est la différence entre .map() et .filter() ?
  • Quel est le problème avec ce code ?
  • Quelle méthode devrait être utilisée ?

Code 3 : Mettre à jour l'âge d'un utilisateur

javascript
const user = { name: 'Alice', age: 25 };
const updatedUser = user;
updatedUser.age = 26;

console.log(user.age);        // Que vaut user.age ?
console.log(updatedUser.age); // Que vaut updatedUser.age ?

Questions :

  • Est-ce que user et updatedUser sont deux objets différents ?
  • Comment créer une vraie copie ?

Code 4 : Calculer la somme d'un tableau

javascript
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, n) => acc + n);

// Et si le tableau est vide ?
const empty = [];
const sumEmpty = empty.reduce((acc, n) => acc + n);

Questions :

  • Que se passe-t-il avec empty.reduce() ?
  • Quelle est la bonne pratique avec .reduce() ?

Code 5 : Trouver tous les nombres pairs

javascript
const numbers = [1, 2, 3, 4, 5];
const evens = numbers.find(n => n % 2 === 0);

console.log(evens); // Que contient evens ?

Questions :

  • Quelle est la différence entre .find() et .filter() ?
  • Quel est le problème ici ?

Pourquoi cet exercice est important

Quand vous utilisez l'IA pour générer du code :

  • L'IA peut faire des erreurs comme celles-ci
  • Vous devez pouvoir les détecter avant d'utiliser le code
  • Comprendre le code est plus important que de le copier-coller

Cet exercice vous entraîne à lire, analyser et valider du code.