Pour qu'un programme soit interactif, il doit pouvoir lire ce que tape l'utilisateur. prompt() est le moyen le plus simple — mais attention au piège classique : ce qu'il renvoie n'est jamais un nombre, même quand on tape un chiffre.
prompt() — demander une valeurprompt() ouvre une petite boîte de dialogue avec un champ de saisie. Quand l'utilisateur valide, la fonction renvoie ce qu'il a tapé.
let nom = prompt("Quel est ton prénom ?");
console.log(`Bonjour ${nom}`);
On peut aussi proposer une valeur par défaut en deuxième argument :
let pseudo = prompt("Ton pseudo ?", "Anonyme");
Si l'utilisateur clique sur Annuler, prompt() renvoie null. On peut tester :
let nom = prompt("Ton prénom ?");
if (nom === null) {
console.log("Saisie annulée");
} else if (nom === "") {
console.log("Saisie vide");
} else {
console.log(`Bonjour ${nom}`);
}
C'est le bug qui surprend tout le monde au début.
let nombre = prompt("Donne un nombre :");
// L'utilisateur tape : 5
console.log(nombre + 3);
// Affiche : "53" (et non 8)
Pourquoi ? Parce que nombre contient le texte "5", pas le nombre 5. Et avec l'opérateur +, JavaScript préfère concaténer quand au moins un côté est du texte : "5" + 3 donne "53".
prompt() renvoie toujours un string, même quand l'utilisateur tape un chiffre. Si tu veux calculer avec, tu dois convertir.
Trois outils, à choisir selon le contexte.
parseInt() — nombre entierLit le texte caractère par caractère jusqu'au premier qui n'est pas un chiffre. Idéal pour les âges, scores, quantités…
let age = parseInt(prompt("Ton âge ?"));
// "16" → 16
// "16.7" → 16 (la partie décimale est ignorée)
// "16ab" → 16 (s'arrête au premier non-chiffre)
// "abc" → NaN (Not a Number)
parseFloat() — nombre décimalPareil mais accepte le point décimal.
let prix = parseFloat(prompt("Prix en euros ?"));
// "9.99" → 9.99
// "9,99" → 9 (la virgule arrête la lecture — attention !)
// "abc" → NaN
Virgule ou point ?
JavaScript utilise le point comme séparateur décimal, comme dans la plupart des langages de programmation. Tes utilisateurs francophones taperont souvent une virgule. Tu peux convertir : texte.replace(",", ".") avant le parseFloat.
Number() — strictPlus exigeant : il faut que tout le texte soit un nombre, sinon NaN.
Number("16") // 16
Number("16.7") // 16.7
Number("16ab") // NaN (≠ parseInt, qui aurait renvoyé 16)
Number("") // 0 (cas un peu surprenant)
Pour la plupart des cas pédagogiques, parseInt et parseFloat suffisent.
Quand on essaie de convertir un texte qui n'a rien de numérique, on obtient NaN (Not a Number). C'est techniquement un nombre, mais qui propage l'erreur dans tous les calculs.
let age = parseInt("salut");
console.log(age); // NaN
console.log(age + 10); // NaN
console.log(age * 2); // NaN
On teste avec isNaN() :
let age = parseInt(prompt("Ton âge ?"));
if (isNaN(age)) {
alert("Ce n'est pas un nombre valide.");
} else {
alert(`Tu as ${age} ans.`);
}
Bonne pratique : toujours vérifier que la conversion a marché avant d'utiliser le résultat.
Le pattern classique combine prompt + conversion + validation :
let age = parseInt(prompt("Ton âge ?"));
if (isNaN(age) || age < 0 || age > 120) {
alert("Âge invalide.");
} else {
alert(`Tu as ${age} ans.`);
}
Si tu veux boucler tant que la saisie n'est pas valide, c'est typiquement le rôle d'un while :
let age;
do {
age = parseInt(prompt("Ton âge ?"));
} while (isNaN(age) || age < 0 || age > 120);
alert(`Tu as ${age} ans.`);
alert et confirmprompt a deux cousines plus simples.
alert() — afficher un messagealert("Bienvenue !");
Ne renvoie rien d'utile. Sert juste à afficher.
confirm() — demander oui/nonlet veutContinuer = confirm("Veux-tu continuer ?");
if (veutContinuer) {
console.log("OK, on continue");
} else {
console.log("Abandon");
}
Renvoie true si OK, false si Annuler. Pratique pour les questions binaires.
promptprompt() est parfait pour apprendre, mais en pratique, on l'utilise rarement sur un vrai site :
Sur un vrai site, on utilise des champs <input> dans un formulaire HTML. On lit leur valeur avec document.getElementById("monChamp").value. Mais ça, c'est l'étape suivante.
prompt("question") ouvre une boîte de saisie et renvoie ce que tape l'utilisateur."42" n'est pas le nombre 42.parseInt(texte) pour un entier, parseFloat(texte) pour un décimal.isNaN(valeur) vérifie si la conversion a échoué — toujours tester avant d'utiliser.alert("message") pour afficher, confirm("question") pour oui/non.prompt est un outil d'apprentissage. Sur un vrai site : des champs <input> HTML.