Chapitre 116 minDébutant
C'est quoi JavaScript ? Où s'exécute le code
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- expliquer ce qu'est JavaScript et où il s'exécute : navigateur ou Node.js ;
- inclure un script dans une page avec
deferoutype="module"; - exécuter du code dans la console des outils de développement ;
- préparer ton environnement de travail et le projet fil rouge.
3 exercices corrigés2 schémas
JavaScript est un langage de programmation interprété par les navigateurs web : il donne un comportement aux pages, là où HTML décrit leur contenu et CSS leur apparence. Ce chapitre explique où s'exécute ton code, comment l'inclure dans une page, quels outils installer, et présente Gestock, l'application que tu vas construire tout au long du cours.
HTML, CSS et JavaScript : qui fait quoi
Une page web repose sur trois langages, chacun avec son rôle :
| Langage | Rôle | Exemple dans Gestock |
|---|---|---|
| HTML | Le contenu et sa structure | Le tableau des pièces, le formulaire d'ajout |
| CSS | La présentation | La ligne en rouge quand une pièce est en alerte |
| JavaScript | Le comportement | Filtrer le tableau à chaque lettre tapée, vérifier le formulaire, charger le stock depuis le serveur |
Sans JavaScript, une page ne change qu'en rechargeant une nouvelle page envoyée par le serveur. Avec JavaScript, elle réagit tout de suite : un message d'erreur apparaît sous le champ mal rempli, une liste se met à jour, une notification s'affiche.
JavaScript n'a rien à voir avec Java. Le nom est un choix marketing de 1995, quand Netscape a créé le langage pour son navigateur. Java est un autre langage, compilé, que tu croiseras peut-être en entreprise ; la syntaxe se ressemble un peu (accolades, if, for), le fonctionnement pas du tout.
ECMAScript : la norme du langage
Le langage est normalisé sous le nom d'ECMAScript par l'organisme Ecma International, dans la norme ECMA-262. Un comité, le TC39, où siègent les éditeurs de navigateurs, publie une nouvelle édition chaque année : ECMAScript 2026 est la 17e édition, publiée en juin 2026. Quand tu lis « ES6 » ou « ES2015 » dans un tutoriel, il s'agit de l'édition de 2015, celle qui a apporté let, const, les fonctions fléchées, les classes et les modules. Tout ce que ce cours appelle « JavaScript moderne » vient de là et des éditions suivantes.
Où s'exécute JavaScript : navigateur et Node.js
Pour exécuter du JavaScript, il faut un moteur qui lit le code et l'exécute, et un environnement qui lui donne accès au monde extérieur. Le langage est le même partout ; ce qui change, ce sont les objets que l'environnement met à ta disposition.
| Dans le navigateur (front-end) | Avec Node.js (back-end et outils) | |
|---|---|---|
| Ce que le code manipule | La page affichée, les clics, les saisies | Les fichiers, le réseau, la base de données |
| Objets propres | window, document, localStorage, alert | process, modules node:fs, node:http |
| Objets communs | console, fetch, setTimeout, JSON, Math | les mêmes |
| Qui peut lire le code | Tout visiteur du site | Seul le serveur |
| Cours du site | Ce cours, puis React | Node.js et Express |
Ce cours porte sur le navigateur. Tu utiliseras aussi Node.js, mais seulement comme outil : pour lancer le serveur de développement Vite et les tests Vitest.
Ce que JavaScript ne peut pas faire dans le navigateur
Le navigateur exécute le code de n'importe quel site : il l'enferme donc dans un bac à sable (sandbox). Ton script ne peut pas lire les fichiers du disque de l'utilisateur (sauf celui qu'il choisit lui-même dans un champ <input type="file">), ni lancer un programme, ni lire les données d'un autre site ouvert dans un autre onglet. Par défaut, il ne peut même pas lire la réponse d'une API située sur un autre domaine, sauf si ce serveur l'autorise par CORS (CORS et sécurité des API).
Deux conséquences te concernent directement :
- Le code envoyé au navigateur est public. N'importe qui peut l'ouvrir avec les outils de développement. Une clé d'API, un mot de passe ou une règle secrète écrits dans ton JavaScript sont lisibles par tous.
- Le contrôle côté client ne protège rien. Vérifier un formulaire en JavaScript rend service à l'utilisateur honnête, qui voit son erreur tout de suite. Un utilisateur malveillant peut désactiver ton script ou envoyer la requête à la main : le serveur doit toujours refaire les contrôles.
Ta première ligne : la console des outils de développement
Tous les navigateurs intègrent des outils de développement (DevTools). Ouvre-les avec F12, ou Ctrl + Maj + I sous Windows et Linux, Cmd + Option + I sous macOS (dans Safari, active d'abord le menu Développement dans les réglages avancés). Va dans l'onglet Console et tape :
console.log('Bonjour Réparinfo');
2 + 3 * 4
'Gestock'.toUpperCase()
Bonjour Réparinfo
14
'GESTOCK'
console.log(...) affiche une valeur : c'est ton premier outil pour voir ce que fait ton code. La console affiche aussi directement la valeur d'une expression tapée seule. Elle te servira à tester une ligne avant de l'écrire dans un fichier, et surtout à lire les messages d'erreur (chapitre 12).
Inclure JavaScript dans une page : la balise script
Pour qu'une page exécute ton code, tu l'écris dans un fichier .js et tu le relies à la page avec la balise <script> :
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Gestock</title>
<script src="js/main.js" defer></script>
</head>
<body>
<h1>Gestock</h1>
<p id="resume"></p>
</body>
</html>
// js/main.js
const resume = document.querySelector('#resume');
resume.textContent = 'Le stock est chargé.';
Le script cherche l'élément #resume de la page et change son texte. Il doit donc s'exécuter après que le navigateur a lu le HTML : c'est le rôle de l'attribut defer.
| Écriture | Téléchargement | Exécution | Quand l'utiliser |
|---|---|---|---|
<script src="…"> dans le head | Bloque la lecture du HTML | Tout de suite, avant que le reste de la page existe | Jamais pour ton code : document.querySelector y renvoie null |
<script src="…"> en bas du body | À la fin | Après la lecture de la page | L'ancienne méthode, encore très répandue |
<script src="…" defer> | En parallèle | Après la lecture, dans l'ordre des balises | Un script classique |
<script type="module" src="…"> | En parallèle | Comme defer | Ton code découpé en modules (chapitre 11) : le choix de Gestock |
<script src="…" async> | En parallèle | Dès qu'il est téléchargé, dans n'importe quel ordre | Un script indépendant de la page, comme une mesure d'audience |
Tu peux aussi écrire du JavaScript directement entre <script> et </script>, ou dans des attributs comme onclick="…". Évite les deux : le code mélangé au HTML est difficile à maintenir, et les attributs on… sont bloqués par les politiques de sécurité de contenu (CSP) que mettent en place les sites sérieux. Tu verras la bonne méthode, addEventListener, au chapitre 8.
Préparer ton environnement de travail
Il te faut un navigateur à jour, un éditeur de code et un petit serveur web local.
- L'éditeur. Visual Studio Code est le plus utilisé ; ses fonctions d'autocomplétion et de détection d'erreurs marchent sans extension pour JavaScript.
- Node.js en version LTS. Télécharge-le sur nodejs.org (bouton LTS) : depuis le 28 octobre 2026, c'est la version 26 ; la 24, encore maintenue jusqu'en avril 2028, convient aussi. Vérifie l'installation avec
node --versiondans un terminal. Node.js installe aussinpm, le gestionnaire de paquets. - Un serveur local. Ouvrir ton
index.htmlpar un double-clic (adresse enfile://) fonctionne pour un script simple, mais les modules etfetchy sont bloqués par le navigateur. Sers ton projet par HTTP.
Le plus simple est de créer le projet avec Vite, l'outil de développement que tu retrouveras dans le cours React :
npm create vite@latest gestock -- --template vanilla
cd gestock
npm install
npm run dev
Le gabarit vanilla crée un projet en JavaScript sans framework, avec un index.html et un dossier de sources. npm run dev lance un serveur local (par défaut http://localhost:5173) qui recharge la page à chaque enregistrement.
Le gabarit range le code dans src/ et contient une petite démonstration (un compteur, des logos) : supprime ces fichiers d'exemple. Ce cours range le code dans un dossier js/ : renomme src/ en js/ et corrige la balise <script> de index.html, ou garde src/ et adapte les chemins. Le dossier public/ du gabarit reçoit les fichiers copiés tels quels sur le site, comme le stock de départ de Gestock (chapitre 10). Sans npm, une seule commande suffit pour servir un dossier, si Python est installé : python3 -m http.server 8000, puis ouvre http://localhost:8000.
Le projet fil rouge : Gestock
Réparinfo répare des ordinateurs portables. Les techniciens consomment des pièces (SSD, mémoire, chargeurs, dalles d'écran, pâte thermique) et le gérant commande quand il y pense. Gestock doit :
- afficher la liste des pièces avec leur quantité et leur prix ;
- signaler les pièces dont la quantité est inférieure ou égale au seuil d'alerte ;
- filtrer la liste pendant la frappe et n'afficher, si on le demande, que les pièces en alerte ;
- ajouter une unité ou en retirer une d'un clic ;
- ajouter une pièce par un formulaire qui refuse les saisies incorrectes ;
- garder les données entre deux visites et les charger depuis un serveur.
Chaque pièce sera décrite par une référence (trois lettres, un tiret et deux ou trois chiffres : SSD-512), un nom, une catégorie, une quantité, un seuil et un prix unitaire. Voici le stock de départ, que tu retrouveras dans tous les exemples :
| Référence | Nom | Catégorie | Quantité | Seuil | Prix |
|---|---|---|---|---|---|
| SSD-512 | SSD NVMe 512 Go | Stockage | 12 | 5 | 42,90 € |
| RAM-16 | Barrette DDR4 16 Go | Mémoire | 3 | 4 | 38,50 € |
| CHG-65 | Chargeur USB-C 65 W | Alimentation | 0 | 2 | 24,00 € |
| ECR-156 | Dalle 15,6 pouces | Écran | 2 | 1 | 89,00 € |
| PAT-01 | Pâte thermique | Consommable | 25 | 10 | 6,50 € |
| Chapitre | Ce que tu ajoutes à Gestock |
|---|---|
| 2 à 4 | Les variables d'une pièce, le statut d'une pièce, les premières fonctions |
| 5 et 6 | Le stock en tableau d'objets, la valeur du stock, la recherche, le JSON |
| 7 | L'affichage du tableau dans la page |
| 8 | La recherche pendant la frappe, les boutons + et −, le formulaire validé |
| 9 | L'enregistrement dans le navigateur |
| 10 | Le chargement depuis une API |
| 11 | Le découpage en modules |
| 13 | Le clavier, le focus et les annonces pour lecteur d'écran |
| 14 | Les tests automatiques |
Exercices
Exercice 1 sur 3 Navigateur ou serveur ? Réussi À revoir
Pour chaque tâche, dis si elle doit être faite par le JavaScript du navigateur, par le serveur, ou par les deux.
- Afficher un message sous le champ « Référence » quand le format est faux.
- Vérifier que l'utilisateur connecté a le droit de supprimer une pièce.
- Calculer la valeur totale du stock affichée en haut de la page.
- Refuser l'enregistrement d'une pièce dont le prix est négatif.
- Appeler une API de fournisseur avec une clé d'API payante.
Voir la réponseMasquer la réponse de l'exercice 1
- Le navigateur : c'est un confort pour l'utilisateur, qui voit son erreur sans attendre.
- Le serveur : un contrôle d'accès fait dans le navigateur se contourne en envoyant la requête à la main.
- Le navigateur peut le faire à partir des données qu'il a reçues : c'est un affichage, pas une décision.
- Les deux : le navigateur pour prévenir tout de suite, le serveur parce que lui seul garantit que la base ne contiendra jamais un prix négatif.
- Le serveur : une clé écrite dans le JavaScript du navigateur est lisible par tout visiteur, qui pourrait l'utiliser à tes frais.
Tu avais trouvé ?
Exercice 2 sur 3 Le script qui ne trouve rien Réussi À revoir
Une page contient ce head et ce body. La console affiche TypeError: Cannot set properties of null (setting 'textContent'). Explique pourquoi et propose deux corrections.
<head>
<script src="js/main.js"></script>
</head>
<body>
<p id="resume"></p>
</body>
// js/main.js
document.querySelector('#resume').textContent = '5 références';
Voir la réponseMasquer la réponse de l'exercice 2
Sans attribut, le script s'exécute dès que le navigateur rencontre la balise, dans le head, avant d'avoir lu le body. À ce moment, l'élément #resume n'existe pas : querySelector renvoie null, et modifier .textContent sur null provoque l'erreur.
Corrections possibles : ajouter defer (<script src="js/main.js" defer></script>), charger le script comme module (<script type="module" src="js/main.js"></script>), ou déplacer la balise juste avant </body>. Les deux premières sont préférables : le téléchargement commence plus tôt.
Tu avais trouvé ?
Exercice 3 sur 3 Vrai ou faux Réussi À revoir
- JavaScript et Java sont deux versions du même langage.
- Node.js permet d'utiliser
document.querySelector. fetchexiste dans le navigateur et dans Node.js.- Un script chargé avec
type="module"s'exécute avant la fin de la lecture du HTML. - Un utilisateur peut lire le code JavaScript d'un site qu'il visite.
Voir la réponseMasquer la réponse de l'exercice 3
- Faux : deux langages différents, seul le nom se ressemble.
- Faux : Node.js n'a pas de page, donc pas d'objet
documentni de DOM. - Vrai :
fetchest disponible dans Node.js depuis la version 18. - Faux : un module est différé comme avec
defer, il s'exécute après la lecture du HTML. - Vrai : il est téléchargé par le navigateur et visible dans les outils de développement, même s'il est minifié.
Tu avais trouvé ?