Les bases de JavaScript
let et const, et effectue des opérations sur des nombres, des chaînes de caractères et des booléens. Apprends comment JavaScript convertit les types pour ne plus être surpris lorsque "5" + 2 donne "52". Prends des décisions avec des comparaisons, des opérateurs logiques, if/else et switch, puis repère et corrige les erreurs avec la console et le débogueur du navigateur.DébutantUnité 1 sur 9 de la formation Formation : JavaScript : DOM, événements et code asynchrone
Ce que tu vas apprendre
- Relie du JavaScript à une page HTML, contrôle le moment où le code s’exécute et utilise la console du navigateur pour exécuter du code et voir son résultat.
- Ajoute du JavaScript à une page HTMLAjoute des scripts avec l’élément
<script>, directement dans la page ou depuis un fichier séparé, et choisis leur emplacement et leur mode de chargement. - Écris des instructions et utilise la consoleÉcris des instructions et des commentaires, exécute du code dans la console du navigateur et affiche des résultats avec
console.loget les boîtes de dialogue intégrées du navigateur.
- Ajoute du JavaScript à une page HTML
- Déclare des variables avec des noms clairs, choisis entre
letetconstet détermine où chaque variable peut être utilisée.- Déclare et nomme des variablesCrée des variables avec
letetconst, donne-leur des noms valides et lisibles et mets à jour celles qui changent. - Détermine la portée des variables déclarées avec let et const et prévois les erreurs associéesDétermine dans quelle partie du code une variable peut être utilisée, puis reconnais et corrige les erreurs produites par
letetconst.
- Déclare et nomme des variables
- Reconnais les types de données de JavaScript, calcule correctement avec des nombres et construis et modifie du texte avec des chaînes de caractères et des littéraux de gabarit.
- Identifie les types de données avec typeofNomme les types de données de JavaScript, distingue
nulldeundefinedet vérifie le type de n’importe quelle valeur avectypeof. - Effectue des calculs avec des nombres et des opérateurs arithmétiquesUtilise les opérateurs arithmétiques et d’affectation, applique la priorité des opérateurs, arrondis les résultats et reconnais les limites de la virgule flottante et les valeurs numériques particulières.
- Crée et modifie des chaînes de caractèresÉcris des littéraux de chaîne, inclus des guillemets et des caractères spéciaux, et utilise la longueur, les indices et les méthodes courantes des chaînes de caractères.
- Construis du texte avec des littéraux de gabaritInsère des valeurs et des expressions dans du texte avec des chaînes entre accents graves, écris du texte sur plusieurs lignes et mets en forme des nombres dans des messages.
- Identifie les types de données avec typeof
- Convertis explicitement des valeurs avec
Number(),String()etBoolean(), et prévois les conversions automatiques que JavaScript effectue dans les opérateurs et les conditions.- Convertis des valeurs explicitementConvertis du texte en nombres et d’autres valeurs en chaînes de caractères ou en booléens, puis vérifie si la conversion a réussi.
- Prévois les conversions implicites de typesPrévois les résultats des opérateurs appliqués à des types différents et utilise les valeurs vraies et fausses à bon escient.
- Convertis des valeurs explicitement
- Compare correctement des valeurs, combine des conditions avec des opérateurs logiques et choisis le code à exécuter avec
if,else, l’opérateur conditionnel etswitch.- Compare des valeursUtilise les opérateurs de comparaison pour produire
trueoufalseet prévois les résultats des comparaisons de chaînes, de types différents, denull, deNaNet de nombres décimaux. - Combine des conditions avec des opérateurs logiquesRelie et inverse des conditions avec
&&,||et!, utilise l’évaluation en court-circuit et fournis des valeurs par défaut avec||et??. - Choisis les instructions à exécuter avec if, else, l’opérateur conditionnel et switchÉcris des enchaînements de
if,else ifetelse, choisis des valeurs avec l’opérateur conditionnel et traite des cas fixes avecswitch.
- Compare des valeurs
- Lis les messages d’erreur, suis les valeurs affichées dans la console et suspends le code dans le débogueur du navigateur pour voir exactement ce qu’il fait.
- Lis les messages d’erreur et suis les valeurs avec la consoleDistingue les erreurs de syntaxe, d’exécution et de logique, lis les messages d’erreur et utilise les valeurs affichées pour trouver où un résultat devient incorrect.
- Suspends l’exécution et parcours le code pas à pas avec le débogueurPlace des points d’arrêt, parcours le code ligne par ligne et inspecte les valeurs des variables pendant que l’exécution est suspendue.
- Lis les messages d’erreur et suis les valeurs avec la console
JavaScript : cours
1Exécute un script et observe son résultat
Un navigateur peut effectuer un calcul dès que tu charges une page, mais le code doit être placé quelque part et disposer d’un moyen d’afficher son résultat. Relie un script au HTML, choisis quand il s’exécute et utilise la console pour voir ses messages. De petites expériences dans la console t’aideront à apprendre le langage avant de modifier les éléments d’une page. Tu découvriras aussi la différence entre la valeur d’une expression et un message affiché par un programme.
1.1 Relie JavaScript au HTML
HTML donne sa structure à une page, CSS contrôle son apparence et JavaScript ajoute des comportements. Le moteur JavaScript d’un navigateur exécute les instructions d’un script. Sauf si une décision modifie le chemin suivi, ces instructions s’exécutent de haut en bas.
Place le code dans la page ou dans un fichier séparé
Un script interne contient du JavaScript entre ses balises d’ouverture et de fermeture :
<script>
console.log("Hello from the page");
</script>
Un script externe conserve le JavaScript dans un fichier .js séparé. Ce HTML le charge :
<script src="js/app.js"></script>
Le fichier externe contient console.log("Hello from the page"); sans balises <script>. Séparer les fichiers garde le HTML lisible, permet à plusieurs pages de partager du code et permet au navigateur de mettre le script en cache. Lorsque src est présent, le code à l’intérieur du même élément est ignoré. Utilise une seule approche par élément et écris toujours la balise de fermeture </script> : un <script ... /> autofermant ne ferme pas l’élément en HTML.
Choisis quand le script s’exécute
Un script classique sans attribut de chargement interrompt l’analyse du HTML pendant que le navigateur le charge et l’exécute. Dans <head>, il s’exécute avant que le contenu ultérieur du corps de page soit construit. Le placer juste avant </body> met le contenu de la page avant lui.
Pour un script classique externe dans <head>, defer est un choix par défaut utile :
<script src="js/app.js" defer></script>
Le navigateur télécharge le script tout en continuant à analyser le HTML. Il exécute le script une fois l’analyse terminée. Plusieurs scripts différés s’exécutent dans leur ordre dans le HTML : un deuxième script peut donc utiliser les valeurs définies par le premier.
| Choix de chargement | Moment d’exécution du script | Ordre de plusieurs scripts |
|---|---|---|
| Classique, sans attribut | Lorsque l’analyse l’atteint, après son chargement | Ordre du HTML |
defer | Après l’analyse du HTML | Ordre du HTML |
async | Dès la fin de son téléchargement | Ordre de fin des téléchargements |
Utilise async pour du code indépendant qui ne dépend ni de l’état de préparation de la page ni d’un autre script. Ajouter defer à un script classique interne n’a aucun effet.
Charge un module
<script type="module" src="js/main.js"></script>
L’exécution d’un module est différée par défaut et il s’exécute en mode strict. Il peut partager du code au moyen de import et export. Pour charger des modules dans Chrome ou Firefox, sers le projet avec un serveur de développement local, comme la fonctionnalité de serveur en direct d’un éditeur. Ouvrir la page à une adresse file:// entraîne des restrictions de chargement des modules.
Vérifie la connexion
Supposons que index.html se trouve à côté d’un dossier js contenant greet.js. Place console.log("Page ready"); dans ce script et <script src="js/greet.js" defer></script> dans l’en-tête HTML. Ouvre la page, puis sa console : le message est « Page ready ».
Le chemin relatif part du dossier du fichier HTML. Avec cette organisation, src="greet.js" pointe vers un emplacement incorrect. Un message indiquant que le fichier est introuvable signifie qu’il n’y a aucun script à exécuter à cette adresse. Si tu as copié les balises HTML dans le fichier JavaScript, le moteur signale plutôt une erreur de syntaxe au niveau du balisage.
Points clés
- Un script externe utilise
src; son fichier JavaScript contient du code sans balises HTML. - Un chemin relatif vers un script part du dossier du fichier HTML.
- Un script classique externe différé s’exécute après l’analyse ; les scripts différés conservent l’ordre du HTML.
- Un script asynchrone s’exécute dès qu’il est prêt : les scripts dépendants nécessitent donc un autre choix de chargement.
- Les modules sont différés par défaut et utilisent le mode strict.
- Un élément script nécessite une balise de fermeture
</script>.
1.2 Écris des instructions et examine la console
La console du navigateur affiche les messages, les erreurs et les résultats du code que tu saisis. Ouvre la console de la page que tu testes. Dans Chrome ou Edge, utilise Ctrl+Shift+J sous Windows/Linux ou Cmd+Option+J sur Mac. Dans Firefox, utilise Ctrl+Shift+K ou Cmd+Option+K. F12 ouvre l’ensemble des outils de développement dans Chrome et Edge.
Instructions et expressions
Une expression produit une valeur : 4 + 5 produit 9. Une instruction donne une consigne, par exemple stocker cette valeur ou l’afficher :
let total = 4 + 5;
console.log("Total:", total);
La première ligne s’exécute avant la seconde, qui affiche « Total: 9 ». Un point-virgule termine une instruction. JavaScript peut insérer de nombreux points-virgules omis, mais les sauts de ligne ne fonctionnent pas toujours comme séparateurs. Termine les instructions par des points-virgules pour rendre la structure voulue explicite.
Saisis 2 + 3 dans la console et appuie sur Entrée pour voir 5. Utilise Shift+Enter pour passer à une nouvelle ligne sans exécuter la saisie. Si tu saisis let x = 5;, la console peut afficher undefined comme résultat de cette instruction. Cela ne signifie pas que x contient undefined : saisir ensuite x affiche 5. De même, un appel à console.log() affiche son message et renvoie lui-même undefined.
Noms et commentaires
JavaScript distingue les majuscules des minuscules. console.log("Hi"); fonctionne, mais Console.log("Hi"); désigne un nom différent et déclenche une ReferenceError. console.Log("Hi"); trouve console, mais échoue avec une TypeError, car il n’existe pas de méthode Log appelable.
Les commentaires s’adressent aux lecteurs. Le moteur les ignore :
// Keep the starting value for the next calculation.
let total = 4;
/* A comment can also
continue on another line. */
console.log(total);
Placer // devant une instruction désactive temporairement cette ligne. Un commentaire utile explique une raison que le code seul ne rend pas claire.
Messages, avertissements et expériences
console.log("Total:", 9); affiche ses arguments séparés par des espaces. console.warn() signale un avertissement ; console.error() signale un message d’erreur. Afficher un message avec console.error() ne déclenche pas en soi d’exception. console.clear() efface l’affichage.
Les saisies dans la console sont des essais, pas des modifications enregistrées. Recharger la page exécute à nouveau les scripts enregistrés de la page. Tu peux inspecter dans la console les variables de niveau supérieur des scripts classiques ; celles d’un module restent dans ce module.
Boîtes de dialogue simples et mode strict
alert("Saved!"); affiche un message. confirm("Continue?") renvoie true pour OK et false pour Annuler. prompt("Quantity?", "1") renvoie la chaîne de caractères saisie, ou null pour Annuler. Saisir 12 donne "12", pas 12. Ces boîtes de dialogue suspendent les interactions tant qu’elles sont ouvertes.
Place "use strict"; au début d’un script classique pour que certaines erreurs soient signalées. Par exemple, totl = 5; sans déclaration déclenche une ReferenceError en mode strict ; dans un script classique sans mode strict, cela peut créer une variable globale accidentelle. Un module utilise déjà le mode strict. Vérifie l’orthographe des noms et déclare-les avant de leur affecter des valeurs.
Points clés
- La saisie dans la console évalue les expressions et
console.log()affiche des messages. - Le
undefinedaffiché pour une déclaration est distinct de la valeur stockée dans sa variable. - Les noms distinguent les majuscules des minuscules ; les commentaires sont ignorés pendant l’exécution.
prompt()renvoie du texte ounull, etconfirm()renvoie un booléen.- Le mode strict signale comme erreurs les affectations à des noms non déclarés.
2Stocke des valeurs et maîtrise la portée des noms
Les variables donnent aux valeurs des noms que le reste de ton programme peut utiliser. Le choix entre const et let indique au lecteur si une nouvelle valeur sera affectée à un nom. L’endroit où tu déclares une variable compte aussi : une valeur créée dans un bloc peut être inaccessible à l’extérieur. Suis un petit total cumulé, puis parcours des blocs imbriqués pour voir à quelle variable chaque nom fait référence et pourquoi les erreurs de déclaration produisent des messages différents.
2.1 Déclare, affecte et mets à jour des valeurs
Une variable est un nom qui désigne une valeur. Tu peux d’abord déclarer le nom et lui affecter sa valeur plus tard, ou faire les deux dans une seule instruction. L’opérateur d’affectation = stocke la valeur de droite sous le nom de gauche.
Choisis let ou const
let score;
console.log(score); // undefined
score = 10;
score = score + 2;
console.log(score); // 12
let score; déclare la variable. Tant qu’une affectation ne lui donne pas une autre valeur, elle contient undefined. L’affectation suivante stocke 10. Dans score = score + 2;, JavaScript lit l’ancien score, ajoute 2, puis stocke 12. C’est une instruction de mise à jour : elle n’a donc pas besoin d’avoir un sens en tant qu’équation mathématique. Une réaffectation utilise le nom existant sans répéter let.
Une déclaration const doit inclure sa valeur initiale :
const BOILING_POINT_C = 100;
La déclaration const rate; est une erreur de syntaxe, car il lui manque une valeur initiale. Essayer d’affecter une nouvelle valeur à BOILING_POINT_C plus tard déclenche une TypeError.
| Déclaration | Une valeur initiale est-elle nécessaire ? | Le nom peut-il recevoir une nouvelle affectation ? |
|---|---|---|
let | Non | Oui |
const | Oui | Non |
Utilise const par défaut. Choisis let pour un total cumulé, un compteur ou un résultat auquel des instructions ultérieures affecteront une valeur. Une valeur calculée à partir d’autres valeurs peut elle aussi utiliser const si le programme ne réaffecte jamais ce nom.
Donne un sens clair au nom
Les noms peuvent contenir des lettres, des chiffres, _ et $ ; ils ne peuvent pas commencer par un chiffre. place1 est valide, mais pas 1stPlace. Les espaces sont interdites et un trait d’union est interprété comme une soustraction : total-price ne désigne donc pas une seule variable. Les mots réservés comme if, return et class ne peuvent pas servir de noms de variables.
Utilise camelCase pour les noms ordinaires : itemCount, firstName ou priceWithTax. Les noms de booléens comme isLoggedIn et hasDiscount décrivent une valeur qui répond à une question par oui ou par non. Indique les unités lorsqu’elles évitent les confusions : distanceKm et durationMin. Les valeurs fixes connues avant l’exécution du programme utilisent souvent UPPER_SNAKE_CASE, comme MAX_LOGIN_ATTEMPTS. La casse compte : total et Total sont des noms distincts.
Étudie un total cumulé
const TAX_RATE = 0.2;
let total = 0;
total = total + 12.5;
total = total + 7.5;
const totalWithTax = total * (1 + TAX_RATE);
console.log(totalWithTax); // 24
Le total commence à 0, passe à 12.5, puis à 20. Le multiplicateur 1 + TAX_RATE vaut 1.2, donc le montant final est 24. Seul total doit recevoir de nouvelles affectations. Le taux de taxe et le montant final calculé utilisent const.
Si tu écris let total = 7.5; une deuxième fois dans la même portée, tu essaies de déclarer une deuxième variable, et non de mettre à jour la première. Utilise total = 7.5; pour remplacer la valeur.
Reconnais les anciennes déclarations
Les anciens codes utilisent souvent var. Il fonctionne toujours, mais ses variables appartiennent à une fonction ou à un script plutôt qu’à un bloc imbriqué ordinaire. Il autorise les déclarations répétées, et les lectures avant la déclaration produisent undefined. Les mots-clés modernes let et const permettent de repérer ces erreurs. Garde leurs règles à l’esprit lorsque tu lis un ancien tutoriel qui utilise var.
Points clés
=calcule le membre de droite, puis stocke sa valeur sous le nom de gauche.- Utilise
constpar défaut etletlorsque le code affectera une nouvelle valeur au nom. - Une déclaration
constexige une valeur initiale. - Réaffecte une variable existante sans répéter son mot-clé de déclaration.
- Des noms descriptifs en camelCase peuvent indiquer le sens et les unités.
2.2 Suis la portée et diagnostique les erreurs de déclaration
Un bloc est le code compris entre des accolades, comme le corps d’un if. La portée d’une variable est la région où son nom désigne cette variable. let et const ont tous deux une portée de bloc, qui comprend les blocs imbriqués à l’intérieur du bloc où ils sont déclarés.
Conserve un résultat là où il est nécessaire
const temperatureC = 31;
let label;
if (temperatureC > 30) {
label = "hot";
} else {
label = "mild";
}
console.log(label); // hot
label est déclarée à l’extérieur des branches, donc la dernière ligne peut la lire. Chaque branche affecte une valeur à la variable existante. Si tu déclares plutôt const label = "hot"; dans la première branche, cette variable ne peut pas être lue après le bloc. Si aucune autre variable label n’est dans la portée, la dernière lecture déclenche une ReferenceError.
Une déclaration au niveau supérieur d’un script classique a une portée globale : le code ultérieur de ce script et les autres scripts classiques de la page peuvent l’utiliser. Dans un module, les variables de niveau supérieur appartiennent à ce module. Conserve une variable dans la plus petite portée où elle est nécessaire pour réduire les conflits de noms.
Distingue le masquage de la réaffectation
let x = 1;
{
let x = 2;
console.log(x); // 2
}
console.log(x); // 1
La déclaration interne crée une variable distincte. C’est le masquage : dans le bloc interne, x désigne la variable interne. La variable extérieure reste égale à 1. Supprimer le let interne affecterait plutôt 2 à la variable extérieure. Des noms distincts rendent cette différence plus facile à lire.
Lis avant l’initialisation
Une liaison à portée de bloc couvre tout son bloc, mais elle n’est pas accessible avant d’être initialisée par sa déclaration. La région qui précède l’initialisation est la zone morte temporaire :
console.log(price);
let price = 5;
Cela déclenche ReferenceError: Cannot access 'price' before initialization. Le nom existe dans la portée, mais n’est pas prêt. Par comparaison, price is not defined signifie qu’aucune liaison portant ce nom n’y est accessible. Une déclaration interne masque aussi un nom extérieur avant la ligne de déclaration interne ; la valeur extérieure ne peut pas contourner la zone morte temporaire de la variable interne.
Associe chaque erreur à une correction
| Problème | Type d’erreur | Correction |
|---|---|---|
const rate; | SyntaxError | Fournir une valeur initiale |
Un deuxième let total dans une même portée | SyntaxError | Affecter une valeur sans ajouter let |
| Lecture avant l’initialisation | ReferenceError | Initialiser avant la lecture |
| Lecture d’un nom inconnu ou hors de portée | ReferenceError | Corriger le nom ou déplacer sa déclaration |
Réaffectation d’une variable const | TypeError | Utiliser let si une réaffectation est nécessaire |
Les erreurs de syntaxe empêchent le démarrage du script concerné. Une erreur d’exécution interrompt l’exécution en cours lorsqu’elle atteint l’instruction fautive. Pour faciliter les essais, Chrome autorise une nouvelle déclaration let dans une entrée de console distincte ; cela ne rend pas valides les déclarations en double dans un script.
Const fixe la référence
Les valeurs primitives comme les nombres et les chaînes de caractères ne peuvent pas changer sur place. Le contenu d’un objet peut changer même lorsque son nom utilise const :
const settings = { theme: "dark" };
settings.theme = "light"; // allowed
Le nom désigne toujours le même objet. L’affectation settings = {}; essaie de remplacer cette référence et déclenche une TypeError.
Points clés
- Les noms déclarés avec
letetconstont pour portée le bloc qui les contient. - Déclare un résultat partagé avant les branches qui lui affectent une valeur.
- Le masquage crée une variable distincte ; la réaffectation modifie la variable existante.
- Une lecture dans la zone morte temporaire échoue même si la liaison existe dans cette portée.
- Les déclarations en double sont des erreurs de syntaxe, tandis que la réaffectation d’une variable
constprovoque uneTypeErrorà l’exécution. - Le contenu d’un objet associé à un nom déclaré avec
constpeut être modifié sans réaffecter ce nom.
3Calcule avec des valeurs et construis du texte
Le type d’une valeur aide à comprendre ce que fera une opération. Les nombres permettent les calculs, les chaînes contiennent du texte et les booléens contiennent true ou false. Apprends à examiner ces types, à maîtriser l’ordre des opérations arithmétiques et à stocker les résultats des méthodes de chaîne. Les littéraux de gabarit te permettent ensuite de combiner des valeurs dans des messages lisibles. Les sorties exactes de la console montreront les différences de comportement entre le texte, les nombres, l’arrondi et la mise en forme.
3.1 Identifie le type d’une valeur
Les valeurs 7, "7" et true ont des types différents. Elles peuvent apparaître à des endroits semblables sur une page, mais JavaScript applique des règles différentes à chacune. Un type décrit la valeur actuellement contenue dans une variable, et non une restriction permanente sur cette variable.
Commence par les trois types principaux
Un number représente les valeurs numériques entières et décimales : 42, -7 et 3.75 ont tous le même type. La notation scientifique est également numérique : 1e3 signifie 1000. Une string contient du texte entre guillemets : "42" est donc du texte, même si ses caractères sont des chiffres. Un boolean est exactement true ou false, sans guillemets. Les comparaisons produisent des booléens qu’un programme peut utiliser pour prendre des décisions.
Utilise typeof pour examiner une valeur. Il renvoie une chaîne qui nomme le type :
console.log(typeof 7); // number
console.log(typeof "7"); // string
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
Les commentaires montrent les mots affichés ; les résultats eux-mêmes sont des chaînes comme "number".
Reconnais les valeurs absentes
let city;
let middleName = null;
console.log(city); // undefined
console.log(middleName); // null
undefined signifie généralement qu’aucune valeur n’a été fournie à JavaScript, comme avec une variable let non initialisée. null est généralement affecté de façon intentionnelle pour signifier « vide » ou « aucune valeur ». Teste une valeur volontairement vide avec middleName === null.
N’utilise pas typeof value === "object" pour tester null. typeof null donne "object" en raison d’un comportement historique du langage, même si null est une valeur primitive.
Connais la liste complète des types
JavaScript possède sept types primitifs : number, string, boolean, undefined, null, bigint et symbol. Le huitième type est object, utilisé pour les valeurs structurées. Les fonctions sont des objets que l’on peut appeler, même si typeof renvoie "function" pour elles.
Un bigint est un nombre entier écrit avec un n final, comme 9007199254740993n. Il permet de représenter exactement de grands entiers. Ne mélange pas un bigint et un number dans une opération arithmétique : 1n + 2 déclenche une TypeError. Un symbol est un identifiant unique ; typeof Symbol("id") donne "symbol". typeof 42n donne "bigint".
NaN est un autre résultat particulier à reconnaître : malgré son nom, qui signifie « pas un nombre », typeof NaN donne "number". C’est une valeur numérique qui indique un résultat numérique invalide. Son nom ne désigne pas à lui seul un type distinct.
Suis une variable qui change
let data = 42;
console.log(typeof data); // number
data = "forty-two";
console.log(typeof data); // string
C’est le typage dynamique. Une réaffectation peut remplacer un nombre par une chaîne. Cette souplesse rend utile l’affichage de la valeur et de son type lorsqu’un résultat est surprenant :
const input = "7";
console.log(input, typeof input); // 7 string
console.log(input + 1); // 71
console.log(7 + 1); // 8
La première addition assemble du texte ; la seconde additionne des nombres. Les valeurs primitives ne peuvent pas changer sur place : une opération crée une nouvelle valeur. Mettre à jour une variable change la valeur qu’elle désigne.
Points clés
- Les valeurs ont des types ; après réaffectation, une variable
letpeut contenir des valeurs de types différents. typeofrenvoie une chaîne qui nomme le type d’une valeur.undefinedsignifie souvent qu’aucune valeur n’a été affectée ;nullindique généralement une absence volontaire.typeof nulldonne"object"ettypeof NaNdonne"number".
3.2 Maîtrise les calculs et leurs résultats numériques
JavaScript utilise un seul type numérique ordinaire pour les valeurs entières et décimales. La division conserve une partie fractionnaire : 10 / 4 donne 2.5. L’opérateur choisi et son ordre d’exécution influent tous deux sur le résultat.
Calcule dans l’ordre voulu
| Opérateur | Signification | Exemple |
|---|---|---|
+, - | Additionner, soustraire | 8 - 3 donne 5 |
*, / | Multiplier, diviser | 7 / 2 donne 3.5 |
% | Reste | 17 % 5 donne 2 |
** | Puissance | 2 ** 3 donne 8 |
Les puissances sont calculées avant les multiplications, les divisions et les restes, qui sont calculés avant les additions et les soustractions. Les opérateurs de même niveau s’exécutent de gauche à droite, sauf les puissances, qui s’associent de droite à gauche : 2 ** 3 ** 2 équivaut à 2 ** 9, soit 512. Les parenthèses modifient cet ordre : 2 + 3 * 4 donne 14, mais (2 + 3) * 4 donne 20.
Pour calculer la moyenne de 72, 85 et 90, additionne tout le groupe avant de diviser :
const average = (72 + 85 + 90) / 3;
console.log(average); // 82.33333333333333
Sans parenthèses, 72 + 85 + 90 / 3 ne divise que 90 et donne 187.
Sépare les unités entières et les restes
Math.trunc(7 / 2) supprime la partie fractionnaire et donne 3. Pour une longueur positive de 245 cm, Math.floor(245 / 100) donne 2 mètres et 245 % 100 donne 45 centimètres restants. De même, 3 725 secondes donnent 1 heure avec Math.floor(3725 / 3600), 2 minutes avec Math.floor((3725 % 3600) / 60) et 5 secondes avec 3725 % 60. Pour un entier, n % 2 === 0 teste s’il est pair. Un reste prend le signe de l’opérande de gauche : -7 % 3 donne -1.
Mets un nombre à jour
x += 5 signifie x = x + 5. Les opérateurs -=, *=, /=, %= et **= suivent le même principe. En partant de 10, les mises à jour += 5, *= 2, -= 4, puis /= 2 donnent 15, 30, 26, puis 13.
++ augmente de un et -- diminue de un. Avec let a = 5; let b = a++;, a devient 6, mais b reçoit 5 : l’incrémentation postfixée renvoie l’ancienne valeur. Avec let b = ++a;, en repartant de a = 5, les deux deviennent 6. Une mise à jour sur sa propre ligne évite de dépendre du résultat de cette expression.
Arrondis et mets en forme à bon escient
| Outil | Règle de résultat | Exemple |
|---|---|---|
Math.round() | Entier le plus proche ; valeurs à mi-chemin vers l’infini positif | Math.round(-2.5) donne -2 |
Math.floor() | Vers le bas, en direction de l’infini négatif | Math.floor(-2.5) donne -3 |
Math.ceil() | Vers le haut, en direction de l’infini positif | Math.ceil(2.1) donne 3 |
Math.trunc() | Supprime la partie fractionnaire vers zéro | Math.trunc(-2.7) donne -2 |
Math.round(13.456 * 100) / 100 donne le nombre 13.46. En revanche, (3.14159).toFixed(2) donne la chaîne "3.14" et (19.999).toFixed(2) donne "20.00". Mets en forme à la fin : ajouter un nombre à une chaîne mise en forme assemble du texte.
Reconnais les limites numériques
Les nombres utilisent la virgule flottante binaire sur 64 bits. La plupart des fractions décimales sont approximatives, donc 0.1 + 0.2 donne 0.30000000000000004. Arrondis pour l’affichage, compare avec une petite tolérance adaptée ou calcule en unités entières comme les centimes ou les millimètres.
Certaines opérations invalides renvoient une valeur au lieu de déclencher une exception : 5 / 0 donne Infinity, -5 / 0 donne -Infinity, et 0 / 0 ou "abc" * 2 donne NaN. La plupart des opérations arithmétiques avec NaN donnent encore NaN ; NaN ** 0 est une exception et donne 1.
Tous les entiers jusqu’à Number.MAX_SAFE_INTEGER, soit 9007199254740991, sont exacts. Au-delà, seuls certains entiers peuvent être représentés : 9007199254740992 + 1 donne encore 9007199254740992. Les bigints permettent de représenter exactement des entiers plus grands.
Points clés
- Les parenthèses permettent de diviser une somme entière.
%donne un reste ; la division seule conserve la partie fractionnaire.- L’incrémentation postfixée renvoie l’ancienne valeur ; l’incrémentation préfixée renvoie la nouvelle.
- Les fonctions floor, ceil, round et trunc se comportent différemment pour les valeurs négatives.
toFixed()produit du texte pour l’affichage.- Les calculs décimaux peuvent être approximatifs, même avec des entrées d’apparence simple.
NaNet les infinis sont des valeurs particulières du type number.
3.3 Lis, recherche et transforme du texte
Une chaîne stocke du texte entre deux apostrophes, deux guillemets doubles ou deux accents graves correspondants. Pour du texte ordinaire, les trois peuvent représenter la même valeur. Ces signes marquent le début et la fin du texte ; ils ne font pas partie de la valeur.
Guillemets, échappements et assemblage
Utilise l’autre type de délimiteur pour inclure un guillemet ou une apostrophe : "It's late". Un échappement utilise une barre oblique inverse, comme dans 'It\'s late'. \n représente un saut de ligne, \t une tabulation et \\ une barre oblique inverse. La séquence \n occupe une position dans la chaîne, même si elle s’écrit avec deux caractères. "It's".length donne 4 ; "Line 1\nLine 2".length donne 13.
L’opérateur + concatène les chaînes. "Hello" + " " + "world" donne "Hello world" ; aucune espace n’est insérée si l’un des morceaux n’en contient pas. Avec let msg = "Hi"; msg += " there";, la valeur mise à jour est "Hi there".
Les positions commencent à zéro
const language = "JavaScript";
console.log(language.length); // 10
console.log(language[0]); // J
console.log(language[4]); // S
console.log(language[9]); // t
console.log(language.at(-1)); // t
console.log(language[10]); // undefined
Le dernier indice est length - 1. Un argument négatif passé à at() compte depuis la fin. length est une propriété, pas une méthode : language.length() déclenche une TypeError. Plus précisément, les positions et la propriété length d’une chaîne utilisent les unités de code UTF-16, les unités que JavaScript utilise pour stocker le texte. Ces lettres anglaises ordinaires occupent chacune une unité ; certains symboles et émojis en occupent davantage.
Enregistre la nouvelle chaîne
Les chaînes sont immuables : leur contenu ne peut pas être modifié sur place. Affecter word[0] = "b" lorsque word vaut "cat" ne crée pas "bat" ; en mode strict, cela déclenche une exception. Les méthodes qui transforment du texte renvoient une nouvelle chaîne :
let name = "ana";
name.toUpperCase();
console.log(name); // ana
name = name.toUpperCase();
console.log(name); // ANA
Appeler la méthode ne suffit pas à conserver son résultat. Écrire name.toUpperCase sans parenthèses ne l’appelle pas du tout.
Choisis la bonne opération sur le texte
toLowerCase() et toUpperCase() modifient la casse ; trim() supprime les espaces aux deux extrémités. Le chaînage applique chaque méthode au résultat de la précédente : " Ana@Example.com ".trim().toLowerCase() donne "ana@example.com".
includes(), startsWith() et endsWith() renvoient des booléens. Par exemple, "report.pdf".endsWith(".pdf") donne true. indexOf() donne l’indice de la première occurrence ou -1 : "JavaScript".indexOf("S") donne 4, mais rechercher "s" donne -1. Les recherches distinguent les majuscules des minuscules. "JavaScript".includes("script") donne false ; convertis en minuscules avant cette recherche pour obtenir true.
slice(start, end) renvoie le texte à partir de l’indice de début jusqu’à l’indice de fin exclu. "JavaScript".slice(0, 4) donne "Java" ; .slice(4) et .slice(-6) donnent "Script".
"a-b-c".replace("-", "+") donne "a+b-c" ; replaceAll() avec les mêmes arguments donne "a+b+c". "ab".repeat(3) donne "ababab" et "5".padStart(3, "0") donne "005". Pour const city = "paris";, city[0].toUpperCase() + city.slice(1) produit "Paris" en assemblant une première lettre majuscule et le reste inchangé.
Points clés
- Les chaînes nécessitent des délimiteurs correspondants et la concaténation n’ajoute pas d’espaces d’elle-même.
- Le premier indice est zéro et le dernier indice pour des lettres ordinaires est
length - 1. lengthest une propriété ; les méthodes s’appellent avec des parenthèses.- Les méthodes de transformation produisent de nouvelles chaînes : enregistre donc leurs résultats.
- Les recherches dans les chaînes distinguent les majuscules des minuscules.
slice()exclut son indice de fin.
3.4 Insère des valeurs dans des messages lisibles
Un littéral de gabarit place du texte entre accents graves. À l’intérieur, ${...} marque un espace réservé dont l’expression sera évaluée et insérée dans le texte. C’est utile lorsqu’un message combine plusieurs valeurs avec de la ponctuation, des espaces ou des calculs.
Lis un espace réservé comme une expression
const name = "Ana";
const greeting = `Hello, ${name}!`;
console.log(greeting); // Hello, Ana!
Le moteur lit name, obtient "Ana" et le place entre la salutation et le point d’exclamation. Les accents graves et les symboles de l’espace réservé décrivent la chaîne ; ils n’apparaissent pas dans le message obtenu.
Avec la concaténation, la même idée s’écrit "Hello, " + name + "!". Un message plus long comme "Hello, " + name + "! You have " + count + " new messages." nécessite plusieurs morceaux entre guillemets séparés. Un gabarit garde toute la phrase ensemble : `Hello, ${name}! You have ${count} new messages.`. Les espaces doivent tout de même être saisies là où tu les veux.
Calcule, puis mets en forme dans l’espace réservé
const name = "Ana";
const tickets = 3;
const price = 4.5;
const receipt = `${name} bought ${tickets} tickets for ${(tickets * price).toFixed(2)} in total.`;
console.log(receipt);
La sortie est « Ana bought 3 tickets for 13.50 in total. » D’abord, tickets * price produit 13.5. Les parenthèses font de tout ce produit le receveur de .toFixed(2), qui produit "13.50". L’espace réservé insère ce texte dans la phrase. Les variables numériques price et tickets restent inchangées.
Sans mise en forme, un espace réservé affiche la forme textuelle ordinaire du nombre. `${0.1 + 0.2}` donne "0.30000000000000004". Une mise en forme à l’intérieur, `${(0.1 + 0.2).toFixed(2)}`, donne "0.30".
Les expressions conviennent, pas les instructions
Un espace réservé peut contenir une valeur, un calcul, un appel de méthode ou une expression qui choisit une valeur. Avec birthYear = 1990, `You turn ${2026 - birthYear} this year.` donne « You turn 36 this year. »
L’opérateur conditionnel peut choisir du texte au singulier ou au pluriel :
const count = 1;
console.log(`You have ${count} ${count === 1 ? "item" : "items"}`);
// You have 1 item
La comparaison choisit une chaîne à insérer. Une instruction if ne peut pas remplacer cette expression dans ${...}, car un espace réservé nécessite une expression qui produit une valeur.
Garde la ponctuation exacte
Seuls les accents graves activent les espaces réservés. Avec const n = 5;, "n + 1 = ${n + 1}" est du texte ordinaire et laisse ${n + 1} inchangé. Le gabarit `n + 1 = ${n + 1}` donne « n + 1 = 6 ». Un accent grave est un caractère différent d’une apostrophe.
Les sauts de ligne saisis entre accents graves deviennent des sauts de ligne dans la chaîne obtenue. Les espaces d’indentation en font également partie. Les valeurs absentes sont insérées sous forme de texte : `${undefined}` donne "undefined", tandis que `${null}` donne "null". Si un message contient « undefined » de façon inattendue, examine la variable insérée et l’endroit où une valeur lui a été affectée.
Points clés
- Les accents graves activent les espaces réservés
${...}. - Un espace réservé évalue une expression et insère sa forme textuelle.
- Mets un nombre calculé en forme dans son espace réservé lorsque le message nécessite un nombre fixe de décimales.
- Les chaînes entre guillemets laissent les symboles des espaces réservés inchangés.
- Les sauts de ligne et l’indentation d’un gabarit deviennent une partie de la chaîne.
4Convertis les entrées et prévois les changements automatiques
Le texte saisi par un utilisateur doit souvent devenir un nombre pour qu’un calcul fonctionne. JavaScript convertit aussi les valeurs de lui-même, et sa règle d’addition peut transformer un total attendu en texte concaténé. Apprends à choisir une conversion, à vérifier si une entrée est absente ou invalide et à suivre une expression dans son ordre d’évaluation. Les mêmes valeurs prendront ensuite leur sens lorsqu’elles seront utilisées comme conditions plutôt que comme nombres.
4.1 Convertis les entrées sans en perdre le sens
Une conversion explicite signifie que tu écris toi-même la conversion, avec un outil comme Number(), String() ou Boolean(). Elle rend visible le type voulu au moment où une valeur entre dans le calcul.
Choisis une conversion numérique
Number() lit tout le texte comme un nombre, en ignorant les espaces qui l’entourent. Number("1.5") donne 1.5 et Number(" 12 ") donne 12. Number("12px") donne NaN, car toute la chaîne n’est pas numérique. Le code utilise un point décimal : Number("1,5") donne aussi NaN.
parseInt() et parseFloat() lisent le début numérique d’un texte et s’arrêtent lorsque la suite ne convient plus. parseInt("12px", 10) donne 12 ; parseFloat("3.75 kg") donne 3.75. L’analyseur d’entiers s’arrête au point décimal, donc parseInt("0.5", 10) donne 0. parseInt("abc", 10) donne NaN, car le texte ne commence pas par un nombre. Passe une base à parseInt() : parseInt("08", 10) donne 8, tandis que parseInt("ff", 16) lit de l’hexadécimal et donne 255.
Le plus unaire convertit également du texte numérique ordinaire : +"42" donne 42.
Distingue une entrée absente de zéro
Une boîte de dialogue prompt renvoie une chaîne ou null. Annuler renvoie null et valider un champ vide renvoie "". Les deux deviennent zéro avec Number(), tout comme un texte composé uniquement d’espaces. Vérifie l’absence de réponse avant de convertir :
const input = prompt("Enter a quantity:");
if (input === null || input.trim() === "") {
console.log("No quantity entered.");
} else {
const quantity = Number(input);
if (Number.isNaN(quantity)) {
console.log("Please type a number.");
} else {
console.log(quantity + 1);
}
}
Le || évite l’appel à trim() lorsque input vaut null. Saisir « 12 » mène au calcul numérique et affiche 13. Saisir « 12px » mène au message indiquant que le nombre est invalide. Saisir « 0 » est une réponse valide et affiche 1.
Utilise Number.isNaN(value) pour tester si une valeur est réellement NaN. value === NaN ne réussit jamais. L’ancienne fonction globale isNaN() convertit d’abord son argument : isNaN("hello") donne true, mais Number.isNaN("hello") donne false, car cette valeur est toujours une chaîne.
Convertis en texte ou en booléen
String(42) donne "42", String(true) donne "true" et String(null) donne "null". (42).toString() produit aussi "42", mais appeler .toString() sur null ou undefined déclenche une TypeError. String() prend en charge les deux.
Boolean() renvoie false pour false, 0, -0, 0n, "", null, undefined et NaN ; ce sont des valeurs fausses. Les navigateurs possèdent aussi l’ancien objet document.all, qui est une valeur fausse. Les autres valeurs sont vraies. En particulier, "0", "false" et une chaîne contenant une seule espace sont toutes des valeurs vraies. !!value effectue la même conversion en booléen.
Pour deux réponses à prompt "12" et "30", a + b produit "1230". Convertis d’abord les deux entrées : Number(a) + Number(b) donne 42.
Points clés
Number()attend une chaîne entièrement numérique ; les analyseurs peuvent lire un préfixe numérique.- Vérifie si l’utilisateur a annulé ou laissé le champ vide avant la conversion numérique pour éviter que ces entrées deviennent zéro.
- Utilise
Number.isNaN()pour détecter un résultat numérique invalide. - Les chaînes non vides comme
"false"sont des valeurs vraies. String()peut convertirnulletundefinedsans erreur.
4.2 Prévois les conversions implicites une opération à la fois
Une conversion implicite est une conversion automatique de type dans une opération. Ses règles dépendent de l’opérateur. Un calcul qui semble fonctionner peut tout de même contenir une valeur textuelle qui provoquera l’échec d’une étape ultérieure.
Suis la règle d’addition
Pour les opérandes ordinaires de type number, string, boolean, null et undefined, + assemble du texte si l’un des opérandes est une chaîne. Sinon, il effectue une conversion numérique et une addition. "5" + 2 donne "52" et 2 + "5" donne "25".
Évalue un enchaînement de gauche à droite :
console.log(1 + 2 + "3"); // 33
console.log("3" + 1 + 2); // 312
Dans la première expression, deux nombres s’additionnent pour donner 3 ; ajouter ensuite "3" assemble les deux formes textuelles en "33". Dans la seconde, la première opération produit déjà "31", donc la dernière ajoute un autre chiffre. Les parenthèses peuvent modifier l’opération effectuée en premier : "3" + (1 + 2) donne "33".
Les autres opérations arithmétiques attendent des nombres
La soustraction, la multiplication, la division, le reste et les puissances convertissent les chaînes numériques en nombres. "5" - 2 donne 3, "5" * "2" donne 10 et "10" / "4" donne 2.5. Une chaîne comme "abc" ne peut pas devenir un nombre valide, donc "abc" * 2 donne NaN. Les bigints suivent des règles arithmétiques distinctes ; mélanger un bigint avec un number déclenche une TypeError.
Cette différence peut masquer une erreur :
const price = "20";
console.log(price * 3); // 60
console.log(price + 5); // 205
La multiplication convertit le prix, mais ne modifie pas la variable. L’addition suivante reçoit toujours une chaîne. Convertis la valeur une fois à son entrée, puis continue à travailler avec le résultat numérique.
Suis de petites conversions automatiques
Dans les opérations arithmétiques numériques, true devient 1, false devient 0 et null devient 0. Ainsi, true + true donne 2, tandis que null + 1 donne 1. undefined devient NaN, donc undefined + 1 donne NaN. Le plus et le moins unaires convertissent les chaînes numériques : +"42" donne 42, -"5" donne -5 et +"" donne 0.
++ demande toujours une mise à jour numérique, mais += suit la règle d’addition :
let count = "5";
count++;
console.log(count, typeof count); // 6 number
let label = "5";
label += 1;
console.log(label, typeof label); // 51 string
Les conditions appliquent une autre conversion
Une condition if considère une valeur comme vraie ou fausse. "0" est une chaîne non vide et satisfait la condition ; le nombre 0 est une valeur fausse et le bloc est ignoré. Si zéro est une quantité valide, un test de valeur vraie ou fausse ne suffit pas à distinguer zéro d’une réponse absente. Pour une valeur représentée par un nombre ou null, quantity !== null vérifie explicitement qu’elle n’est pas absente.
L’égalité offre aussi deux comportements : "7" == 7 donne true après conversion implicite, mais "7" === 7 donne false, car l’égalité stricte conserve la distinction entre les types. Utilise l’égalité stricte pour les comparaisons ordinaires.
Lorsqu’un résultat est du texte concaténé ou NaN, affiche chaque entrée à côté de typeof input. Trouve le premier type incorrect et corrige la conversion à cet endroit. Convertir "205" en nombre à la fin donnerait 205, et non la somme attendue 25.
Points clés
- Pour les valeurs primitives ordinaires, un opérande de type chaîne fait concaténer
+. - Suis les enchaînements de
+de gauche à droite, en respectant les parenthèses. - Les autres opérations arithmétiques convertissent les chaînes numériques sans modifier les variables d’origine.
++convertit en nombre, tandis que+=peut ajouter du texte.- Le fait qu’une valeur soit vraie diffère de sa validité : zéro peut être une entrée valide.
5Compare des valeurs et choisis un chemin
Les décisions transforment les valeurs en actions : une comparaison peut déterminer si une mesure se trouve dans un intervalle, si un message est absent ou si un choix fixe correspond. Combine les tests avec soin, puis utilise-les pour choisir une valeur ou un bloc de code. L’ordre des branches et les types comparés influent sur le résultat. Suis chaque condition avec des entrées concrètes, notamment zéro, une chaîne vide et une valeur exactement égale à un seuil.
5.1 Compare des valeurs sans hypothèses cachées
Une comparaison produit un booléen. 7 > 3 donne true, 5 >= 5 inclut l’égalité et donne true, et 4 < 2 donne false. Stocke un résultat comme const isAdult = age >= 18;, ou utilise-le directement dans une condition.
Préfère l’égalité stricte
=== compare sans convertir les types. Deux valeurs primitives ordinaires doivent avoir le même type et la même valeur : 7 === 7 donne true, tandis que "7" === 7 donne false. !== inverse l’égalité stricte, donc "7" !== 7 donne true.
L’égalité faible, ==, peut convertir les opérandes. "7" == 7, 0 == "" et "0" == false donnent tous true. Sa règle particulière pour les valeurs absentes rend null == undefined vrai, mais null == 0 faux. != inverse l’égalité faible. Préfère === et !== ; une utilisation intentionnelle de value == null permet de tester à la fois null et undefined.
Distingue l’ordre du texte de l’ordre numérique
Deux chaînes sont comparées de gauche à droite à partir de leurs valeurs de code UTF-16. Pour des mots anglais ordinaires de même casse, "apple" < "banana" donne true. Un préfixe identique plus court vient en premier : "apple" < "apples" donne true. Parmi les lettres anglaises sans accent, les majuscules viennent avant les minuscules, donc "Zebra" < "apple" donne true. Convertir les deux chaînes avec toLowerCase() supprime cette différence de casse dans les comparaisons simples de lettres anglaises.
Les chaînes de chiffres suivent aussi l’ordre du texte :
console.log("10" < "9"); // true
console.log("10" < 9); // false
Dans la première comparaison, le caractère « 1 » vient avant « 9 ». Dans la seconde, un opérande est numérique, donc le texte devient le nombre 10. Convertis explicitement les entrées numériques avant de comparer leurs valeurs. "abc" < 5 et "abc" > 5 donnent tous deux false, car la conversion numérique produit NaN.
Traite d’abord les nombres absents et invalides
NaN n’est pas égal à lui-même : NaN === NaN et NaN == NaN donnent tous deux false. Utilise Number.isNaN() pour le reconnaître.
Les comparaisons d’ordre convertissent null en zéro, donc null >= 0 donne true, mais null > 0 donne false. L’égalité suit une autre règle, donc null == 0 reste false. undefined devient NaN dans les comparaisons d’ordre, donc undefined > 0 et undefined < 0 sont faux ; undefined == 0 est également faux. Vérifie si une valeur est absente avant de la traiter comme une mesure.
Compare les nombres décimaux et les intervalles
L’arrondi binaire fait que 0.1 + 0.2 === 0.3 est faux. Pour ces petites valeurs, un test avec une tolérance fonctionne :
const closeEnough = Math.abs((0.1 + 0.2) - 0.3) < 0.000001;
console.log(closeEnough); // true
Math.abs() supprime le signe de la différence. Choisis une tolérance adaptée à la grandeur et à la précision des valeurs, ou calcule en unités entières comme les millimètres.
N’enchaîne pas les tests d’intervalle comme en mathématiques. Avec x = 50, 0 < x < 10 produit d’abord true, puis compare ce booléen sous la forme 1 < 10, ce qui donne true. De même, 3 > 2 > 1 devient true > 1, soit 1 > 1, ce qui est faux. Écris les deux comparaisons en entier : x > 0 && x < 10.
Points clés
- L’égalité stricte vérifie les types sans conversion implicite.
- Deux chaînes de chiffres sont comparées comme du texte ; convertis-les pour comparer leurs valeurs numériques.
- Vérifie les valeurs absentes et
NaNavant les comparaisons numériques. - Les résultats décimaux peuvent nécessiter une tolérance plutôt qu’une égalité exacte.
- Relie deux comparaisons d’intervalle avec
&&; ne les enchaîne pas.
5.2 Combine les tests et choisis des valeurs par défaut
Les opérateurs logiques permettent à une condition d’exprimer plusieurs exigences. Avec des opérandes booléens, && signifie ET, || signifie OU et ! signifie NON. Leur ordre d’évaluation permet aussi de protéger une opération qui échouerait avec une valeur absente.
Exprime chaque exigence
const temperatureC = 25;
const inRange = temperatureC >= 18 && temperatureC <= 30;
const outside = temperatureC < 18 || temperatureC > 30;
inRange est vrai, car les deux conditions de borne sont respectées. outside est faux, car aucun des tests de sortie de l’intervalle n’est satisfait. OU inclut le cas où les deux côtés sont vrais ; il ne signifie pas « l’un mais jamais les deux ».
Écris chaque comparaison en entier. color === "red" || "green" ne teste pas si l’une ou l’autre couleur correspond. Avec color = "blue", la première comparaison est fausse, mais la chaîne non vide "green" est une valeur vraie. Le test voulu est color === "red" || color === "green".
Regroupe la condition voulue
NON est prioritaire sur ET, et ET sur OU. Ainsi, true || false && false est vrai, mais (true || false) && false est faux.
Supposons que l’accès exige une connexion et le rôle d’administrateur ou de propriétaire. Écris loggedIn && (isAdmin || isOwner). Sans parenthèses, loggedIn && isAdmin || isOwner permet à isOwner de rendre toute l’expression vraie même avec loggedIn = false. Les parenthèses maintiennent l’exigence de connexion pour les deux rôles.
Inverser une condition composée change aussi le connecteur. !(a && b) a la même valeur de vérité que !a || !b ; !(a || b) correspond à !a && !b. Pour une température en dehors de l’intervalle bornes comprises, inverser les deux tests intérieurs transforme >= en <, <= en > et ET en OU.
Arrête-toi lorsque le résultat est connu
ET s’arrête au premier opérande qui est une valeur fausse ; OU s’arrête au premier opérande qui est une valeur vraie. C’est l’évaluation en court-circuit. L’opérande ignoré n’est pas évalué :
const input = null;
const hasText = input !== null && input.trim() !== "";
console.log(hasText); // false
Le premier test est faux, donc trim() n’est jamais appelé sur null. Inverser ces deux tests tenterait d’abord l’opération risquée.
Ces opérateurs renvoient un opérande, pas nécessairement un booléen. "" || "Guest" renvoie "Guest" ; "Sam" || "Guest" renvoie "Sam". "Ana" && "ok" renvoie "ok" et null && "x" renvoie null. Un if qui les englobe teste ensuite si la valeur renvoyée est vraie ou fausse.
Préserve les valeurs fausses qui ont un sens
| Expression | Quand la valeur de repli remplace l’entrée |
|---|---|
| `value | |
value ?? fallback | Uniquement pour null ou undefined |
Avec quantity = 0, quantity || 1 donne 1, mais quantity ?? 1 préserve 0. Avec nickname = "", nickname || "Anonymous" donne la valeur de repli, tandis que nickname ?? "Anonymous" préserve la chaîne vide. Utilise ?? lorsque ces valeurs ont un sens.
Ajoute des parenthèses lorsque tu combines ?? avec ET ou OU : a || b ?? c est une erreur de syntaxe, tandis que (a || b) ?? c possède un regroupement explicite. NON convertit d’abord en booléen, puis inverse la valeur : !0 est vrai et !"0" est faux. Un double NON, !!value, donne un booléen.
Points clés
- ET exige que les deux tests soient vrais ; OU exige qu’au moins l’un des deux le soit.
- Les parenthèses maintiennent les exigences communes pour chaque cas autorisé.
- L’évaluation en court-circuit ignore un opérande dès que le résultat est déterminé.
&&et||renvoient des valeurs d’opérandes qui ne sont pas nécessairement des booléens.??ne remplace quenulletundefined, en préservant zéro et le texte vide.- Combiner directement
??avec ET ou OU nécessite des parenthèses.
5.3 Choisis des branches, des valeurs et des cas fixes
Une instruction if exécute un bloc lorsque sa condition est une valeur vraie. Un else s’exécute lorsque cette condition est une valeur fausse. Utilise des accolades pour montrer exactement quelles instructions appartiennent à chaque branche.
Ordonne un enchaînement de décisions
Un enchaînement de else if effectue ses vérifications de haut en bas. La première condition satisfaite l’emporte et toutes les branches suivantes sont ignorées :
const score = 85;
let grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else {
grade = "F";
}
La première comparaison échoue ; la deuxième est satisfaite, donc grade devient "B". Tester score >= 70 en premier retiendrait même un score de 95 et affecterait "C". Pour des seuils minimaux qui se chevauchent, place le plus élevé en premier. La variable partagée grade est déclarée en dehors des branches pour que le code ultérieur puisse la lire.
Une condition composée peut garder une décision courte lisible. La livraison est gratuite pour une commande d’un montant d’au moins 50 ou pour un membre ; sinon, elle coûte 4,95 :
const orderTotal = 45;
const isMember = false;
let shipping;
if (orderTotal >= 50 || isMember) {
shipping = 0;
} else {
shipping = 4.95;
}
console.log(`To pay: ${orderTotal + shipping}`);
// To pay: 49.95
Deux conditions imbriquées sans branche else peuvent souvent être reliées par ET : if (isLoggedIn) { if (isAdmin) { ... } } exécute son code le plus interne dans les mêmes conditions booléennes que if (isLoggedIn && isAdmin) { ... }.
Évite la ponctuation qui modifie le chemin
Sans accolades, seule l’instruction suivante appartient à un if ; l’indentation ne peut pas lui ajouter une autre instruction. Un point-virgule immédiatement après la condition crée une instruction vide : if (x > 5); { ... } laisse le bloc suivant s’exécuter quelle que soit la condition.
if (x = 5) affecte 5, puis teste si la valeur est vraie. L’instruction modifie x et la condition est satisfaite, car 5 est une valeur vraie. Pour comparer, utilise if (x === 5).
Choisis une valeur avec une expression conditionnelle
L’opérateur conditionnel, ou ternaire, renvoie l’une de deux valeurs :
const age = 17;
const status = age >= 18 ? "adult" : "minor";
console.log(status); // minor
La forme est condition ? valueIfTrue : valueIfFalse. Utilise-la pour un choix court dans une affectation ou un littéral de gabarit. Utilise if/else pour des branches d’instructions. Des expressions conditionnelles trop imbriquées rendent les choix difficiles à suivre.
Fais correspondre des choix fixes avec switch
const day = "Sat";
let kind;
switch (day) {
case "Sat":
case "Sun":
kind = "weekend";
break;
default:
kind = "weekday";
}
switch compare strictement la valeur aux libellés de ses cas. Les deux libellés de fin de semaine mènent à la même affectation. break quitte le switch ; default traite une valeur qui ne correspond à aucun cas. switch ("2") ne correspond pas à case 2:, car les types diffèrent.
Après une correspondance, l’exécution se poursuit dans les cas suivants jusqu’à un break ou à la fin. Ce passage au cas suivant peut être intentionnel, comme avec des libellés placés les uns à la suite des autres, ou accidentel. Si le cas 2 ajoute un mot et ne comporte pas de break avant que le cas 3 n’en ajoute un autre, les deux ajouts s’exécutent. Un libellé de cas est un point d’entrée, pas une nouvelle condition testée après chaque instruction.
Points clés
- Un enchaînement de
else ifn’exécute que sa première branche dont la condition est satisfaite. - Déclare un résultat en dehors des branches lorsque les instructions suivantes en ont besoin.
- Utilise des accolades et ne place pas de point-virgule directement après une condition
if. =affecte une valeur ;===compare des valeurs.- L’opérateur conditionnel choisit une valeur.
switchutilise l’égalité stricte et nécessitebreakpour arrêter le passage aux cas suivants.
6Trouve la première étape incorrecte
Un message d’erreur peut pointer directement vers une erreur, mais un programme peut aussi s’exécuter sans échec et produire un résultat incorrect. Lis le type, le message et l’emplacement dans la console, puis suis les valeurs importantes. Lorsque les affichages laissent trop de place aux suppositions, suspends l’exécution et parcours-la pas à pas. Une petite méthode de débogage reproductible t’aide à tester une cause à la fois et à vérifier la correction dans le programme enregistré.
6.1 Lis les erreurs et suis les résultats incorrects
Un programme peut échouer avant de démarrer, s’arrêter pendant son exécution ou se terminer avec un résultat incorrect. Détermine ce qui s’est produit avant de modifier le code. La console fournit des indices sur les erreurs, tandis que des affichages accompagnés de libellés révèlent les valeurs dans le code qui s’exécute.
Distingue trois types de problèmes
| Type | Ce qui se produit | Exemple |
|---|---|---|
| Erreur de syntaxe | Le script ne peut pas être analysé ; aucune partie de ce script ne s’exécute | Une parenthèse non fermée |
| Erreur d’exécution | L’exécution atteint une instruction qui déclenche une exception ; les instructions précédentes ont été exécutées | Lecture d’un nom inconnu |
| Erreur de logique | Le code s’exécute, mais le résultat est incorrect | Division de la seule dernière partie d’une somme |
Une erreur de syntaxe dans un script n’annule pas un autre script qui s’est déjà exécuté. Une exception d’exécution non gérée arrête l’exécution en cours à l’instruction fautive.
Lis le message complet
Une entrée de console comme Uncaught ReferenceError: totl is not defined indique le type d’erreur et le nom fautif. « Uncaught » signifie que l’exception n’a pas été prise en charge. Un emplacement comme app.js:2 indique le fichier et la ligne ; un clic dessus ouvre ce code.
let total = 0;
total = totl + 5;
console.log(total);
La ligne 1 s’exécute. À la ligne 2, JavaScript ne peut pas lire totl : il ne termine donc pas cette affectation et n’atteint pas le dernier affichage. Corriger la faute en total fait afficher 5 par le script.
Les messages de syntaxe courants mentionnent un ) manquant, un élément inattendu ou un élément invalide. Dans console.log("hi";, la parenthèse fermante est absente. Dans if (x > 3 {, il manque la parenthèse fermante de la condition. La ligne indiquée est celle où le moteur a remarqué le problème ; examine aussi juste au-dessus pour trouver un guillemet ou un délimiteur non fermé.
Utilise le type pour préciser la cause
Une ReferenceError indique un nom inaccessible : faute de frappe, problème de portée ou lecture avant l’initialisation. Une TypeError signifie que l’opération ne convient pas à la valeur, comme dans "abc".length(), null.trim() ou une réaffectation d’une variable const. Une RangeError peut venir d’un argument non pris en charge, comme dans (1.5).toFixed(101).
La formulation des erreurs peut varier selon le navigateur. Le type et la valeur en cause sont plus utiles que la mémorisation de toute la phrase. Corrige la première erreur pertinente et relance le code, car les messages suivants peuvent découler de la même cause.
Suis une erreur de logique
Pour une moyenne incorrecte, affiche séparément la somme et le résultat :
const sum = 72 + 85 + 90;
const average = 72 + 85 + 90 / 3;
console.log("sum:", sum); // 247
console.log("average:", average); // 187
La somme correcte permet de situer l’erreur à l’étape de division. Remplace le calcul par sum / 3, qui donne 82.33333333333333. Lorsque l’addition assemble des chiffres de façon inattendue, affiche aussi les types : console.log("price:", price, typeof price);. Trouve la première valeur qui diffère de celle que tu attends.
Utilise console.warn() ou console.error() pour faire ressortir tes propres messages de diagnostic. Vérifie les filtres de niveau de la console si un affichage semble absent. Une erreur 404 signifie qu’une ressource est introuvable : vérifie donc le chemin du script ; pour les autres échecs de chargement, lis le message complet. L’absence d’un message de démarrage peut aussi être due à un filtre ou à une erreur de syntaxe.
Reproduis le problème, lis la première erreur, teste une cause probable avec une petite modification ou un affichage, puis relance et vérifie le résultat attendu. Supprime les affichages temporaires lorsque l’erreur est corrigée.
Points clés
- Les erreurs de syntaxe, d’exécution et de logique nécessitent différents types d’indices.
- Lis le type d’erreur, le message complet et l’emplacement.
- La ligne indiquée pour une erreur de syntaxe peut se trouver après le délimiteur réellement manquant.
- Affiche les valeurs et les types pour trouver la première étape incorrecte.
- Vérifie les échecs de chargement et les filtres de la console lorsque la sortie attendue est absente.
6.2 Suspends l’exécution et inspecte les valeurs en cours
Un débogueur permet de suspendre un script en cours d’exécution et d’inspecter les valeurs à cet instant précis. Utilise le panneau Sources dans Chrome ou Edge, ou le panneau Débogueur dans Firefox. C’est particulièrement utile lorsqu’un résultat incorrect dépend de plusieurs opérations antérieures.
Suspends l’exécution avant une ligne
Ouvre le script dans Sources et clique sur un numéro de ligne pour placer un point d’arrêt. L’exécution est suspendue avant que cette ligne ne s’exécute. Si le code s’exécute pendant le chargement de la page, recharge-la après avoir placé le point d’arrêt. Placer un point d’arrêt ne relance pas à lui seul du code dont l’exécution est déjà terminée.
Tu peux aussi écrire debugger; dans le script. Avec un débogueur actif, cette instruction suspend l’exécution ; sans débogueur, elle n’a aucun effet. Supprime-la avant de publier le code.
Choisis l’action suivante
| Commande de Chrome | Raccourci | Effet |
|---|---|---|
| Reprendre | F8 | Continuer jusqu’au prochain point d’arrêt ou à la fin |
| Pas à pas principal | F10 | Exécuter l’instruction courante sans entrer dans une fonction appelée |
| Pas à pas détaillé | F11 | Entrer dans une fonction appelée lorsque le débogueur peut y accéder |
| Pas à pas sortant | Shift+F11 | Terminer la fonction courante et suspendre l’exécution dans la fonction qui l’a appelée |
Certains appels intégrés n’ont pas de source JavaScript dans laquelle entrer pas à pas. Le pas à pas principal est utile lorsque tu veux obtenir le résultat d’un appel sans suivre son fonctionnement interne.
Pendant la pause, survole un nom pour l’inspecter, lis les valeurs locales dans Portée ou ajoute une expression aux Expressions espionnes. Les expressions espionnes comme typeof price et total > 100 sont réévaluées à chaque étape. La console peut aussi évaluer des expressions en utilisant la portée au moment de la pause.
Examine un total trompeur
La livraison gratuite devrait commencer à 50, mais ce code l’accorde pour un sous-total de 45 auquel s’ajoutent 4 de frais de livraison :
const subtotal = "45";
const shipping = 4;
const total = subtotal + shipping;
if (total >= 50) {
console.log("Free shipping");
}
Place un point d’arrêt sur la ligne du if et recharge la page. L’affectation a déjà eu lieu. Le volet Portée affiche subtotal comme la chaîne "45" et total comme "454". L’expression espionne typeof total donne "string". La comparaison convertit "454" en nombre, donc total >= 50 est satisfaite.
L’erreur se trouve dans l’addition, avant la comparaison. Remplace le calcul dans le fichier enregistré par const total = Number(subtotal) + shipping;. Recharge à nouveau la page. Le total est maintenant le nombre 49 et la condition est fausse. Si tu suspends plutôt l’exécution sur la ligne d’affectation, celle-ci n’a pas encore été exécutée : utilise le pas à pas principal avant d’inspecter total initialisé.
Suspends l’exécution seulement quand c’est utile
Un point d’arrêt conditionnel ne suspend l’exécution que lorsque son expression est vraie, par exemple total > 100. Fais un clic droit sur le numéro de ligne pour en ajouter un. Un point de journalisation affiche un message à chaque exécution de sa ligne, sans suspendre ni modifier le script. Les points d’arrêt sur exception suspendent l’exécution à l’endroit où une exception est déclenchée, afin que tu puisses inspecter les valeurs au moment de l’échec.
Parcourir un enchaînement de else if pas à pas montre quelle branche est atteinte et quelle condition précédente empêche les tests suivants. Utilise des affichages pour quelques valeurs connues et le débogueur lorsque l’ordre ou plusieurs valeurs en cours sont importants. Effectue la correction finale dans le code enregistré du projet : une modification expérimentale dans le navigateur ne modifie pas durablement ton projet. Relance le cas qui échouait au départ et vérifie le résultat corrigé.
Points clés
- Un point d’arrêt suspend l’exécution avant la ligne concernée ; recharge le code qui s’exécute au chargement de la page.
- Le pas à pas principal exécute une instruction ; le pas à pas détaillé et le pas à pas sortant permettent de suivre les appels de fonctions.
- Les volets Portée et Expressions espionnes montrent les valeurs et les expressions pendant la pause.
- Inspecte un type incorrect avant l’opération qui l’utilise.
- Un point d’arrêt conditionnel limite les pauses ; un point de journalisation affiche un message sans suspendre l’exécution.
- Enregistre la correction dans le projet et relance le cas qui échouait.
JavaScript : exemples
1Charge un script et lis ses premiers messages
13 étapes
- 1IntroductionDonne au code un endroit où s’exécuter
Un navigateur lit le HTML pour construire la page et exécute le JavaScript pour effectuer les instructions. Pour voir un premier résultat, il te faut un script relié à la page et une console ouverte. Nous suivrons une petite page, de l’organisation de ses fichiers jusqu’à son message affiché, puis nous utiliserons des saisies dans la console pour distinguer les valeurs stockées des résultats des instructions.
- 2ExplicationChoisis du code interne ou externe
Un script interne contient du code entre ses balises. Un script externe utilise
srcpour charger un fichier JavaScript séparé :<script src="js/greet.js"></script>Le fichier externe contient du JavaScript sans balises HTML. Le code placé dans ce même élément serait ignoré, car
srcest présent. Conserve la balise de fermeture</script>; HTML ne traite pas cet élément comme autofermant. - 3ExempleFais correspondre le chemin aux dossiers
Place
index.htmlà côté d’un dossier nomméjs, avecgreet.jsà l’intérieur de ce dossier. Lesrc="js/greet.js"de la page part du dossier HTML et entre dansjs.Dans le fichier JavaScript, écris :
console.log("Page ready");Enregistre les deux fichiers. Un chemin
greet.jschercherait à côté du fichier HTML plutôt que dans son sous-dossier et ne trouverait donc pas ce script. - 4ExplicationExécute le script après l’analyse de la page
Ajoute
deferau script classique externe dans l’en-tête :<script src="js/greet.js" defer></script>Le téléchargement s’effectue pendant l’analyse du HTML. L’exécution attend la fin de cette analyse. Plusieurs scripts classiques différés conservent leur ordre dans le HTML, ce qui compte lorsque l’un utilise une valeur définie par un autre. Ajouter
deferà du code classique interne ne retarde pas son exécution. - 5DéfiGarde les scripts dépendants dans l’ordre
Une page contient
setup.jssuivi dedisplay.jsdans son en-tête. Le deuxième script utilise une valeur du premier et les deux ont besoin du contenu analysé de la page. L’attributasyncsur les deux respecterait-il ces exigences ? Quel choix de chargement le permettrait ?---reveal---
Non. Les scripts asynchrones s’exécutent à la fin de leur téléchargement respectif : leur ordre et l’état de préparation de la page ne sont donc pas garantis. Utilise
defersur les deux scripts classiques externes, en gardant le script de préparation en premier dans le HTML. - 6LienReconnais un script de module
Un script chargé avec
type="module"est différé par défaut, utilise le mode strict et conserve ses noms de niveau supérieur dans le module. Les modules peuvent partager du code au moyen de import et export. Dans Chrome ou Firefox, charge les pages utilisant des modules au moyen d’un serveur de développement local ; ouvrir directement une adresse de fichier entraîne des restrictions de chargement des modules. Ces règles de chargement diffèrent de celles d’un script classique ordinaire. - 7ConseilOuvre la console de cette page
Dans Chrome ou Edge, ouvre la console avec
Ctrl+Shift+Jsous Windows/Linux ouCmd+Option+Jsur Mac. Firefox utiliseCtrl+Shift+KouCmd+Option+K. Recharge la page enregistrée et cherche « Page ready ». Une erreur de fichier introuvable te renvoie au chemin ; une erreur de syntaxe pointe vers du code que le moteur n’a pas pu analyser. Les saisies de la console appartiennent à la page courante. - 8ExempleDistingue l’affichage de l’évaluation
Saisis ces lignes séparément dans la console :
let total = 9; total; console.log("Total:", total);La déclaration peut afficher
undefinedcomme résultat. Liretotaldonne toujours9. Le dernier appel affiche « Total: 9 » et renvoie lui-mêmeundefined. Le résultat affiché d’une instruction n’est pas nécessairement la valeur stockée dans la variable ni le message affiché par cet appel. - 9DéfiLis une déclaration dans la console
Tu saisis
let count = 6;et voisundefined. Tu saisis ensuitecount + 2. Quel résultat dois-tu attendre et le premier affichage signifie-t-il que la déclaration a échoué ?---reveal---
Le résultat est
8. La déclaration a bien stocké 6 ; son propre résultat était undefined. L’expression suivante lit ce nombre stocké et ajoute 2. Aucune réaffectation n’a lieu, donc count lui-même contient toujours 6. - 10ExplicationUtilise des noms exacts et des notes claires
JavaScript distingue les majuscules des minuscules.
console.log()fonctionne ;Console.log()cherche un nom différent. Utilise//pour un commentaire d’une ligne ou/* ... */pour un commentaire plus long. Le moteur ignore le texte des commentaires.Commence un script classique par
"use strict";pour repérer les affectations à des noms non déclarés. Une faute de frappe commetotl = 5;signale alors une erreur au lieu de créer accidentellement un nom global. - 11ExempleInspecte le type d’une entrée de boîte de dialogue
Exécute ce code de boîte de dialogue pour t’exercer :
const input = prompt("Quantity?", "1"); console.log(input, typeof input);Valider après avoir saisi 6 donne
6 string: les chiffres ont été renvoyés sous forme de texte. Annuler renvoie null, tandis que valider un champ vide renvoie une chaîne vide.confirm()renvoie quant à lui un booléen, etalert()affiche un message. Une boîte de dialogue attend la réponse avant que l’instruction suivante ne s’exécute. - 12DéfiRelie le chargement à la sortie
Un script classique externe chargé avec defer contient
console.log("Started"); const answer = prompt("Code?"); console.log(typeof answer);. L’utilisateur saisit 42 et valide. Qu’est-ce qui s’affiche, dans quel ordre, et le rechargement conserverait-il automatiquement cette réponse ?---reveal---
Les messages sont « Started » et « string ». Prompt renvoie du texte, même pour des chiffres. Recharger la page exécute à nouveau le script enregistré et ouvre de nouveau la boîte de dialogue ; la variable de l’exécution précédente n’est pas une modification enregistrée du projet.
- 13RécapitulatifVérifie un premier script
Pour un premier script, vérifie le chemin relatif, choisis le mode de chargement, enregistre et recharge la page. Lis le message de la console séparément du résultat de l’évaluation par la console elle-même. Lorsqu’une boîte de dialogue prompt fournit une entrée, inspecte sa valeur et son type avant de construire un calcul autour d’elle. Un nouvel essai dans la console modifie la page en cours d’exécution : conserve donc les modifications durables dans le projet.
2Suis les déclarations, les mises à jour et la portée
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionSuis une valeur dans un programme
- 2ExplicationChoisis les déclarations selon les réaffectations
- 3ExempleLis l’ancienne valeur avant de stocker la nouvelle
- 4ExempleCalcule une valeur finale une seule fois
- 5DéfiChoisis la déclaration adaptée
- 6ExplicationPlace un résultat partagé en dehors de ses branches
- 7DéfiRepère le masquage
- 8Point cléUne liaison peut exister avant d’être prête
- 9ConseilUtilise le type d’erreur comme indice
- 10DéfiCorrige le résultat sans le rendre inaccessible
- 11RécapitulatifLis la liaison, puis la valeur
3Calcule un total et construis son message
18 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConserve le sens des valeurs dans le texte
- 2ExplicationInspecte une valeur avant de l’utiliser
- 3DéfiPrévois un changement de type
- 4Point cléInterprète prudemment un nom de type
- 5ExempleCalcule avant de mettre en forme
- 6ExplicationPlace toute la somme au numérateur
- 7DéfiTrouve les mètres entiers
- 8ConseilChoisis l’arrondi selon sa direction
- 9LienDistingue la précision de l’affichage
- 10ExplicationConserve le résultat d’une transformation
- 11ExempleLis des indices et une extraction
- 12DéfiNettoie d’abord, puis vérifie
- 13Point cléDétermine si une méthode renvoie du texte
- 14ExempleInsère le total calculé
- 15DéfiChoisis les délimiteurs nécessaires
- 16ExplicationLaisse l’expression choisir un mot
- 17DéfiCombine nettoyage et présentation numérique
- 18RécapitulatifInspecte un message de l’intérieur vers l’extérieur
4Accepte une quantité sans masquer une entrée absente
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDistingue l’absence d’une valeur numérique
- 2ExempleInspecte la réponse brute
- 3ExplicationVérifie l’absence avant la conversion
- 4ExempleRejette une conversion échouée
- 5DéfiChoisis une fonction d’analyse adaptée au sens
- 6Point cléConvertis en booléen sans interpréter le mot
- 7ExempleRepère un calcul qui masque du texte
- 8ExplicationÉvalue un enchaînement depuis la gauche
- 9DéfiSuis deux mises à jour différentes
- 10ConseilCorrige l’entrée avant le total
- 11DéfiPréserve zéro tout au long du traitement
- 12RécapitulatifValide dans l’ordre où les informations sont disponibles
5Construis une décision conforme à ses règles
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionTransforme une règle en décision prévisible
- 2ExplicationGarde les types visibles dans l’égalité
- 3ExempleCompare des nombres stockés comme du texte
- 4DéfiIdentifie les véritables opérandes d’une comparaison
- 5ConseilVérifie l’absence et la précision numérique
- 6ExplicationRends chaque exigence explicite
- 7ExempleRegroupe une exigence commune
- 8DéfiConserve une valeur vide lorsqu’elle est valide
- 9Point cléLe court-circuit contrôle ce qui est évalué
- 10ExempleSuis la première branche dont la condition est satisfaite
- 11DéfiChoisis une valeur ou plusieurs instructions
- 12ExplicationLis switch comme un point d’entrée
- 13DéfiPrévois l’effet du break manquant
- 14DéfiCombine conversion et ordre des branches
- 15RécapitulatifTeste la règle à ses bornes
6Localise et corrige un total trompeur
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionTrouve où le résultat devient incorrect pour la première fois
- 2ExplicationClasse l’échec avant de modifier le code
- 3ExempleLis le nom fautif et son emplacement
- 4DéfiDistingue l’analyse syntaxique de l’exécution
- 5ConseilAffiche la première valeur inattendue
- 6ExempleReproduis la décision incorrecte
- 7ExplicationSuspends l’exécution avant la comparaison
- 8Point cléLa conversion ultérieure ne peut pas corriger l’addition
- 9DéfiInspecte avant et après une affectation
- 10ConseilChoisis la pause qui répond à la question
- 11DéfiVérifie une correction de type dans une décision
- 12RécapitulatifTeste à nouveau la correction enregistrée
JavaScript : QCM
Série 1 : Exécute du code et suis les valeurs stockées10 Questions Pratiques
Question 1 sur 10
scripts contenant start.js. Quel élément charge ce fichier après la fin de l’analyse du HTML ?Afficher la réponseMasquer la réponse
scripts et defer diffère l’exécution du script classique externe jusqu’à la fin de l’analyse. async permet aussi le téléchargement pendant l’analyse, mais peut exécuter le script avant la fin de celle-ci. Écrire le chemin comme texte interne ne charge pas de fichier.Question 2 sur 10
Quel message ce code affiche-t-il ?
// console.log("Old");
console.log("Items:", 6 + 2);
Afficher la réponseMasquer la réponse
console.log() sépare le libellé et le résultat par une espace, ce qui produit « Items: 8 ». Assembler les chiffres en « 62 » nécessiterait une concaténation de chaînes, mais les deux opérandes sont ici des nombres.Question 3 sur 10
const rate = 0.15;, puis exécute rate = 0.2;. Que se passe-t-il lors de l’affectation ?Afficher la réponseMasquer la réponse
const déclenche une TypeError lorsque l’exécution l’atteint. Une valeur initiale manquante ferait en revanche de la déclaration elle-même une erreur de syntaxe.Question 4 sur 10
Quelle valeur est affichée ?
let balance = 14;
balance = balance + 9;
balance = balance - 4;
console.log(balance);
Afficher la réponseMasquer la réponse
Question 5 sur 10
Quelles valeurs sont affichées, dans l’ordre ?
let level = 4;
{
let level = 9;
console.log(level);
}
console.log(level);
Afficher la réponseMasquer la réponse
Question 6 sur 10
typeof "28" renvoie-t-il ?Afficher la réponseMasquer la réponse
"28" une chaîne de caractères, même si ses caractères sont des chiffres. typeof indique le type actuel de la valeur et ne convertit pas le texte en nombre. Le résultat "number" décrirait la valeur 28 sans guillemets, et non la valeur donnée ici.Question 7 sur 10
Afficher la réponseMasquer la réponse
Question 8 sur 10
"catalog".slice(1, 4) ?Afficher la réponseMasquer la réponse
slice(1, 4) copie les positions 1, 2 et 3 et exclut la position 4, ce qui donne "ata". Inclure la position de fin ajouterait à tort la lettre suivante et produirait "atal".Question 9 sur 10
ReferenceError: lenght is not defined. Que dois-tu inspecter en premier ?Afficher la réponseMasquer la réponse
lenght est mal orthographié ou inaccessible dans la portée courante. Un chemin de script incorrect empêcherait l’instruction de démarrage de ce fichier de s’exécuter, ce qui ne correspond pas à l’observation.Question 10 sur 10
Supposons qu’aucune déclaration de cost n’existe auparavant. Qu’est-ce qui s’affiche avant l’arrêt de ce script ?
let cost = 8;
{
console.log(cost);
let cost = 12;
}
console.log(cost);
Afficher la réponseMasquer la réponse
cost couvre tout le bloc et masque la liaison extérieure, même avant sa déclaration. Le premier affichage lit donc une liaison interne non initialisée et déclenche une ReferenceError avant d’afficher quoi que ce soit. Il ne peut ni utiliser le 8 extérieur, ni lire la liaison interne comme undefined.Série 2 : Construis du texte et convertis les entrées10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
"notes.txt".endsWith(".txt") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui s’affiche ?
let tag = " mixed ";
tag.trim().toUpperCase();
console.log(tag.length);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
const trays = 4; const massKg = 1.25;, que produit `Mass: ${(trays * massKg).toFixed(1)} kg` ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
const name = "Mira";, quel texte est stocké par const label = "Hello, ${name}"; ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Number("18px") produit-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Number(input). Quelle valeur obtient-on et quelle information a été perdue ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
6 + 2 + "4" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
const shown = (7.5).toFixed(2);, que produit shown + 1 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
null. Une quantité doit être présente, positive ou nulle et numérique ; zéro est autorisé. Quelle suite de validations respecte toutes ces exigences ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Quels sont la valeur et le type affichés ?
let amount = "6";
amount += 2;
amount++;
amount -= 4;
console.log(amount, typeof amount);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Teste des comparaisons et choisis des branches10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
"16" === 16 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
"24" < "8" donne-t-il true ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
0 ?? 5 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’est-ce qui s’affiche ?
const points = 76;
let badge;
if (points >= 60) {
badge = "bronze";
} else if (points >= 75) {
badge = "silver";
} else {
badge = "none";
}
console.log(badge);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
const active = false;, que produit active ? "Ready" : "Waiting" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Quelle valeur est affichée ?
const mode = "2";
let label = "idle";
switch (mode) {
case 2:
label = "fast";
break;
default:
label = "normal";
}
console.log(label);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
approved = false, isEditor = false et isOwner = true, le code utilise approved && isEditor || isOwner. Quel résultat donne-t-il et quelle condition applique toute la règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Quel texte est affiché ?
let route = "";
switch (3) {
case 2:
route += "A";
break;
case 3:
route += "B";
case 4:
route += "C";
break;
default:
route += "D";
}
console.log(route);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
const distance = 42;, quelles sont respectivement les valeurs de 0 < distance < 20 et de distance > 0 && distance < 20 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Suis les erreurs et inspecte l’exécution10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
total = total + 7; lorsque total vaut 11. Quelle valeur apparaît avant le pas à pas principal et quelle valeur apparaît après ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Que se passe-t-il lorsque ce script est chargé ?
console.log("Begin");
let size = 4;
let size = 7;
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
base: 13 number, extra: 4 string et total: 134 string. Par où faut-il commencer la correction ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
raw = "27", fee = 6 et total = "276" juste avant if (total > 100). Quelle modification corrige le classement erroné du total comme élevé ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Quels messages sont affichés avant l’arrêt de ce code ?
console.log("One");
let current = 5;
current += unknownStep;
console.log("Two");
Supposons que unknownStep n’ait pas été déclaré.
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Supposons une nouvelle exécution pour chaque entrée. Que se passe-t-il pour null et pour " 5 " ?
const cleaned = input.trim() !== "" && input !== null;
const total = cleaned ? Number(input) + 2 : 0;
console.log(total);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Corrige des calculs et des décisions10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Math.floor(-3.2) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
const count = 2;, quel message produit `Packed ${count} ${count === 1 ? "box" : "boxes"}` ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
const label = "Draft.PDF";, quelle expression reconnaît la terminaison PDF ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
value. Quel test détecte correctement que cette valeur est NaN ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Quelles valeurs saved et total contiennent-ils à la fin ?
let total = 8;
const saved = total++;
total *= 3;
total -= saved;
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
count ?? 3 et de count || 3 lorsque count vaut 0, et quelle expression respecte la règle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Un badge doit être « gold » à partir de 90 et « silver » de 70 à 89. Qu’est-ce qui est incorrect dans ce résultat et quelle modification corrige les seuils qui se chevauchent ?
const points = 94;
let badge;
if (points >= 70) {
badge = "silver";
} else if (points >= 90) {
badge = "gold";
} else {
badge = "none";
}
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
if (!value) pour rejeter une entrée numérique invalide. L’utilisateur saisit "0", "bad" ou "-2". Quel est le défaut de cette vérification ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Qu’est-ce qui s’affiche ?
let stock = 0;
let status = "empty";
if (stock = 3) {
status = "ready";
}
console.log(stock, status);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 6 : Combine entrées, types et contrôle de l’exécution10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
typeof est "number", mais qui n’est jamais égale à elle-même. Quelle est cette valeur et comment la tester directement ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Qu’est-ce qui s’affiche ?
const massKg = 2.75;
const message = `Load: ${(massKg * 4).toFixed(2)} kg`;
console.log(message);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
const cleaned = raw.trim(); et l’exécution s’y suspend. Comment obtenir et inspecter la valeur initialisée de cleaned ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Quelles sont les valeurs et les types de total et de label affichés ?
const raw = "18";
const fee = 3;
const total = raw * 2 + fee;
const label = raw + fee * 2;
console.log(total, label);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Pour une entrée qui est une chaîne ou null, quelle valeur ce code affecte-t-il à label lorsque input vaut " " ?
const input = " ";
const cleaned = input !== null && input.trim();
const label = cleaned ?? "Guest";
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Qu’est-ce qui s’affiche ?
const raw = "3";
let result = "";
switch (Number(raw)) {
case 3:
result += "M";
case 4:
result += "N";
break;
default:
result = "X";
}
console.log(result);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
L’affichage final doit indiquer un libellé d’expédition pour chaque branche. Quelle correction préserve le résultat extérieur voulu ?
let label = "pending";
if (true) {
let label = "sent";
}
console.log(label);
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
null, NaN ou un nombre. L’intervalle valide inclut 0 et 10. Quel test accepte exactement les valeurs numériques de cet intervalle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
8 + 12 + 36 / 3. Quels diagnostic et correction correspondent à tous ces indices ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
affectation
count = count + 1; utilise l’ancien décompte pour calculer la valeur qui le remplace.affectation composée
let code = "7";, code += 2 stocke "72", car l’addition composée suit toujours la règle d’assemblage du texte.analyse du préfixe numérique
parseFloat("6.2 kg") lit 6.2, tandis que Number("6.2 kg") rejette toute la chaîne et donne NaN.attribut async
async lorsqu’aucun autre script ne dépend de son exécution préalable.attribut defer
defer s’exécutent dans leur ordre dans le HTML, même si le deuxième téléchargement se termine en premier.B
base de numération
parseInt("11", 10) lit onze en décimal, tandis que parseInt("11", 16) lit dix-sept en décimal.booléen
heightM >= 2 renvoie un booléen qui permet de décider si une hauteur respecte une exigence.branche
else peut affecter des frais de livraison lorsque la condition de livraison gratuite a été évaluée comme une valeur fausse.C
camelCase
firstName et totalMassKg montrent les limites des mots tout en restant des noms JavaScript valides.cas par défaut
"normal" dans default lorsque l’entrée ne correspond à aucun de ses modes spéciaux nommés.chaînage de méthodes
" Note ".trim().toLowerCase() supprime d’abord les espaces extérieures, puis modifie la casse du résultat.chaîne de caractères
"203" forment du texte qui peut être assemblé ou parcouru par une recherche sans devenir le nombre 203.coalescence des nuls
count vaut 0, count ?? 3 conserve zéro, tandis que count || 3 le remplace par la valeur de repli.commentaire
// devant un affichage temporaire empêche son exécution tout en conservant le texte pour plus tard.comparaison
massKg <= 20 inclut exactement 20 et peut être stockée comme résultat booléen d’un test de limite.comparaison d’ordre
"30" < "7" est vrai comme comparaison de texte, mais convertir les deux valeurs en nombres inverse ce résultat.concaténation
"Good" + " " + "morning" inclut une espace, car la chaîne du milieu la fournit explicitement.console
6 * 7 dans la console de la page affiche 42 sans ajouter d’instruction au script enregistré.contexte booléen
if, mais une chaîne vide échoue, bien que les deux valeurs soient de type string.conversion explicite
input avant d’ajouter des frais indique clairement que le programme attend un total numérique.conversion implicite
"8" * 2, la multiplication convertit implicitement le texte en nombre pour le calcul et produit 16.conversion numérique implicite
"14" - 2 produit 12 sans modifier une variable qui contenait à l’origine la chaîne.D
débogueur
déclaration
let result; déclare une variable avant que le code ultérieur ne décide quelle valeur y stocker.E
enchaînement de conditions else if
erreur d’exécution
erreur de logique
erreur de syntaxe
espace réservé
${...} d’un littéral de gabarit où une expression est évaluée et où sa forme textuelle est insérée.`Mass: ${count * massKg} kg`, l’espace réservé calcule le total avant de l’insérer.ET logique
&& afin qu’une mesure doive satisfaire les deux exigences.expression
price * count peut fournir une valeur à une affectation ou à un espace réservé de gabarit.expression espionne
typeof total aux expressions espionnes peut révéler l’instruction exacte où une valeur numérique devient une chaîne.É
égalité faible
"12" == 12 est vraie après conversion ; l’égalité stricte permet donc une vérification de type plus prévisible.égalité stricte
"12" === 12 est fausse, car un texte composé des mêmes chiffres reste d’un type différent de celui d’un nombre.évaluation en court-circuit
input !== null dans une protection avec ET peut empêcher un appel risqué à input.trim() lorsque input vaut null.I
immutabilité
text = text.trim(); remplace la valeur de la variable par une nouvelle chaîne au lieu de modifier l’ancienne.incrémentation postfixée
let n = 3; const old = n++;, old reçoit 3 tandis que n devient 4 après sa mise à jour.indice
"planet", l’indice 0 contient "p" et l’indice 5 contient "t" ; l’indice 6 est au-delà de la fin.Infinity
8 / 0 renvoie Infinity : une division par zéro ne déclenche donc pas toujours une exception.initialisation
const widthM = 4;, le nombre 4 est la valeur initiale qui rend la liaison prête à être lue.instruction
let score = 8; console.log(score);, l’instruction de déclaration s’exécute avant l’instruction d’affichage.instruction switch
"4" ignore un case 4: numérique, sauf si l’entrée a été convertie avant le switch.interpolation
name = "Nora", l’interpolation dans `Hello, ${name}` crée la salutation « Hello, Nora ».L
liaison
const préserve sa liaison, car le nom désigne toujours le même objet.littéral de gabarit
`Count: ${count}` place le décompte courant à côté de son libellé descriptif.lois de De Morgan
M
masquage
let total = 2 dans un bloc laisse une variable total extérieure distincte inchangée à la fin du bloc.méthode
label.toLowerCase() produit du texte en minuscules, tandis que l’omission des parenthèses n’appelle pas la méthode.mise en forme
(6).toFixed(2) dans un gabarit affiche "6.00" sans modifier la valeur numérique d’origine.mode strict
"use strict"; aide à repérer une variable mal orthographiée dès sa première affectation.moteur JavaScript
console.log("Ready"); et la console affiche « Ready ».N
NaN
"heavy" avec Number() produit NaN, que Number.isNaN() peut détecter avant un calcul.NON logique
!"0" est fausse, car la chaîne non vide est une valeur vraie avant que sa valeur booléenne soit inversée.null
null, que le programme peut vérifier avant de tenter d’appeler une méthode de chaîne.O
opérateur arithmétique
massKg * count utilise la multiplication pour calculer la masse totale à partir de deux valeurs numériques.opérateur conditionnel
"open" ou "closed" à partir d’un booléen sans écrire deux branches d’affectation séparées.OU logique
P
pas à pas principal
passage au cas suivant
plus unaire
+"31" produit le nombre 31, tandis que "31" + 1 assemble du texte et produit "311".point d’arrêt
point d’arrêt conditionnel
total > 200 ignore les totaux ordinaires plus petits et suspend l’exécution lorsqu’un résultat élevé doit être inspecté.point de journalisation
portée de bloc
const message déclarée dans le corps d’un if ne peut pas être lue après l’exécution de ce corps.portée globale
let count de niveau supérieur établi par un script classique précédent.priorité des opérateurs
4 + 6 * 2, la multiplication s’exécute avant l’addition : le résultat est donc 16 au lieu de 20.R
ReferenceError
totl + 5 peut déclencher une ReferenceError même si une variable total correctement orthographiée existe à proximité.reste
478 % 100 donne les 78 cm restants après les mètres entiers.S
script de module
<script type="module" src="js/main.js"></script> pour son code de module.script externe
<script src="js/start.js"></script> relie la page à du code situé dans un sous-dossier.script interne
<script>console.log("Hello");</script> peut afficher un message directement depuis une page HTML.séquence d’échappement
crée un saut de ligne dans le texte même lorsque le code est écrit sur une seule ligne.suivi de l’exécution
T
tolérance
typage dynamique
let data = 5; data = "five";, typeof data indique le type de la nouvelle valeur de type chaîne.type de données
9 et "9" s’affichent de manière semblable, mais leurs types expliquent pourquoi l’ajout de un donne des résultats différents.TypeError
text.length() traite une propriété numérique comme une fonction : l’opération déclenche donc une TypeError.U
undefined
let nickname;, lire la liaison initialisée donne undefined jusqu’à une nouvelle affectation.V
valeur fausse
0 fait ignorer le bloc if (quantity), même lorsque zéro est une réponse autorisée dans le programme.valeur primitive
valeur vraie
"false" et "0" satisfont les tests de valeur vraie, car chacune contient des caractères au lieu d’être vide.validation des entrées
variable
distanceKm garde la distance mesurée disponible pour des calculs et des messages ultérieurs.virgule flottante
0.1 + 0.2 peut afficher des chiffres supplémentaires à la fin, car les fractions stockées sont approximatives.Z
zone morte temporaire
let price interne empêche une lecture antérieure dans ce même bloc d’accéder à une variable price extérieure.À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.