← Retour aux coursProgrammation

JavaScript transforme une page en système interactif.

Variables, fonctions, objets, DOM, événements et asynchrone : apprends les mécanismes qui permettent à une interface de réagir sans perdre le contrôle de son état.

Niveau · débutant → intermédiaireLecture · 40 minDOM + async
Illustration JavaScript
PrérequisHTML + notions CSS
ObjectifCréer une interaction complète
RéférenceMDN JavaScript

Objectifs d’apprentissage

  • comprendre les valeurs, variables et portées ;
  • écrire des fonctions et manipuler tableaux/objets ;
  • sélectionner et modifier le DOM proprement ;
  • réagir aux événements sans mettre de logique inline dans le HTML ;
  • comprendre promesses, fetch(), async/await et gestion des erreurs ;
  • organiser le code avec les modules.

1. JavaScript : langage et environnement

JavaScript est un langage dynamique et multi-paradigme. Dans un navigateur, il est accompagné d’API fournies par l’environnement : DOM, événements, stockage, réseau, timers, etc. Node.js fournit un autre environnement avec ses propres API.

Distinction importanteArray, Map ou les fonctions sont du JavaScript ; document, fetch et localStorage sont fournis par l’environnement Web.

2. Valeurs, types et variables

Préfère const lorsque la variable ne doit pas être réassignée, et let lorsqu’elle doit changer. var existe encore mais possède des règles de portée qui rendent le code moderne plus difficile à raisonner.

const name = "Awa";
let score = 0;
const active = true;
const skills = ["HTML", "CSS", "JavaScript"];

Les types primitifs incluent notamment chaîne, nombre, booléen, null, undefined, bigint et symbol. Les objets regroupent ensuite des données et comportements.

3. Conditions et boucles

if (score >= 10) {
  console.log("Objectif atteint");
} else {
  console.log("Continue");
}

for (const skill of skills) {
  console.log(skill);
}

for...of est adapté aux valeurs d’un tableau ou d’un autre itérable. Évite d’utiliser for...in pour parcourir les valeurs d’un tableau : il parcourt des clés/propriétés.

4. Fonctions : isoler une responsabilité

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

const double = (value) => value * 2;

Une fonction bien conçue possède un rôle clair, des entrées compréhensibles et un résultat prévisible. Les fonctions sont des objets de première classe : elles peuvent être passées en argument ou retournées par d’autres fonctions.

5. Tableaux et objets

const product = {
  name: "Sneaker",
  price: 45000,
  inStock: true
};

const prices = [12000, 45000, 30000];
const affordable = prices.filter((price) => price <= 30000);

Des méthodes comme map(), filter(), find() et reduce() permettent de transformer des collections avec moins de variables temporaires.

6. DOM : relier le code à la page

Le DOM représente le document sous forme d’objets. JavaScript peut sélectionner des éléments, modifier leur texte, leurs attributs ou leurs classes.

const button = document.querySelector("#save");
const status = document.querySelector("#status");

button.addEventListener("click", () => {
  status.textContent = "Enregistré";
});

Préférer textContent pour du texte réduit aussi les risques liés à l’injection de HTML non prévu.

7. État et rendu

Une interface devient plus simple à maintenir quand tu distingues l’état (les données actuelles) de l’affichage (ce que l’utilisateur voit).

let count = 0;

function render() {
  output.textContent = count;
}

addButton.addEventListener("click", () => {
  count += 1;
  render();
});

8. Asynchrone : attendre sans bloquer l’interface

Les requêtes réseau prennent du temps. Les promesses représentent une valeur disponible plus tard. async/await permet d’écrire cette logique de façon lisible.

async function loadProducts() {
  try {
    const response = await fetch("/api/products");
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("Chargement impossible", error);
    return null;
  }
}

Une promesse n’arrête pas tout le programme : le reste de l’environnement continue de fonctionner pendant l’attente.

9. Modules : découper un projet

// math.js
export function add(a, b) {
  return a + b;
}

// app.js
import { add } from "./math.js";
console.log(add(2, 3));

Les modules limitent les variables globales et permettent de séparer la logique par responsabilités.

10. Erreurs et débogage

  • lire la première erreur de la console avant d’en chercher une autre ;
  • inspecter les valeurs avec le debugger plutôt que multiplier les console.log ;
  • traiter les erreurs réseau et les états de chargement ;
  • éviter eval() et l’injection de chaînes non fiables dans du HTML exécutable ;
  • garder les fonctions courtes et les noms explicites.
Mini-lab JavaScript

Fais réagir une interface

Le compteur illustre : événement → modification d’état → rendu.

0

Exercice — filtre une liste

Crée un tableau de produits avec name, price et inStock. Utilise filter() pour ne garder que les produits disponibles sous un budget donné, puis affiche leurs noms dans une liste HTML avec textContent.

JavaScript & DOM · atelier progressif

Relier les données, les événements et l’interface

JavaScript apporte le comportement à la page. Une variable contient une valeur ; une fonction regroupe une action ; un événement signale un clic ou une saisie ; le DOM représente les éléments HTML que le navigateur expose au script. Un état simple, mis à jour à un seul endroit, permet de garder l’interface prévisible. Pour afficher une chaîne utilisateur, utilise textContent plutôt que d’insérer du HTML non fiable.

Pratique pas à pas

  1. Ajoute un bouton avec l’id ajouter et un paragraphe avec l’id compteur dans une page HTML.
  2. Copie le script à la fin du document ou dans un fichier chargé avec l’attribut defer.
  3. Clique trois fois sur le bouton, puis modifie la valeur initiale. Vérifie que seul le texte du paragraphe change et que la page ne se recharge pas.

Exemple à essayer

<button id="ajouter" type="button">Ajouter 1</button>
<p id="compteur" aria-live="polite">0</p>
<script>
  let nombre = 0;
  const bouton = document.querySelector('#ajouter');
  const sortie = document.querySelector('#compteur');
  bouton.addEventListener('click', () => {
    nombre += 1;
    sortie.textContent = String(nombre);
  });
</script>

Ce que tu dois observer : Chaque clic incrémente l’état nombre, puis met à jour le texte de l’interface. L’attribut aria-live aide à annoncer le changement aux technologies d’assistance.

Erreur fréquente : Confondre la variable JavaScript et le texte affiché ou utiliser innerHTML sans nécessité : l’état n’est pas automatiquement rendu.

Vérifie que tu as compris

Pourquoi attacher un écouteur avec addEventListener ?

Le code réagit à une action précise sans mélanger la logique dans l’attribut HTML.

Que choisir pour afficher du texte venant d’une saisie ?

textContent, qui traite la valeur comme du texte plutôt que comme du balisage.

Une fois l’atelier réalisé et les questions comprises, valide cette étape dans ton parcours.

À retenir

  • JavaScript est le langage ; le navigateur fournit le DOM et d’autres API.
  • L’état doit être séparé autant que possible du rendu.
  • Les promesses et async/await organisent les tâches asynchrones.
  • Les modules réduisent la complexité des gros scripts.
Pause active

Teste ta compréhension

Quel mécanisme permet de réagir à un clic utilisateur ?

Références

Cours suivant

Apprendre la programmation avec Python.

Continuer →