Les bases de JavaScript

Fais tes premiers pas en JavaScript, le langage qui rend les pages web interactives. Relie des scripts à une page HTML, stocke des valeurs avec 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

  1. 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 HTML
      Ajoute 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.log et les boîtes de dialogue intégrées du navigateur.
  2. Déclare des variables avec des noms clairs, choisis entre let et const et détermine où chaque variable peut être utilisée.
    • Déclare et nomme des variables
      Crée des variables avec let et const, 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ées
      Détermine dans quelle partie du code une variable peut être utilisée, puis reconnais et corrige les erreurs produites par let et const.
  3. 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 typeof
      Nomme les types de données de JavaScript, distingue null de undefined et vérifie le type de n’importe quelle valeur avec typeof.
    • Effectue des calculs avec des nombres et des opérateurs arithmétiques
      Utilise 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 gabarit
      Insè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.
  4. Convertis explicitement des valeurs avec Number(), String() et Boolean(), et prévois les conversions automatiques que JavaScript effectue dans les opérateurs et les conditions.
    • Convertis des valeurs explicitement
      Convertis 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 types
      Prévois les résultats des opérateurs appliqués à des types différents et utilise les valeurs vraies et fausses à bon escient.
  5. 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 et switch.
    • Compare des valeurs
      Utilise les opérateurs de comparaison pour produire true ou false et prévois les résultats des comparaisons de chaînes, de types différents, de null, de NaN et de nombres décimaux.
    • Combine des conditions avec des opérateurs logiques
      Relie 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 if et else, choisis des valeurs avec l’opérateur conditionnel et traite des cas fixes avec switch.
  6. 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 console
      Distingue 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ébogueur
      Place des points d’arrêt, parcours le code ligne par ligne et inspecte les valeurs des variables pendant que l’exécution est suspendue.

JavaScript : cours

6 chapitres

1

Exé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 chargementMoment d’exécution du scriptOrdre de plusieurs scripts
Classique, sans attributLorsque l’analyse l’atteint, après son chargementOrdre du HTML
deferAprès l’analyse du HTMLOrdre du HTML
asyncDès la fin de son téléchargementOrdre 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 undefined affiché 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 ou null, et confirm() renvoie un booléen.
  • Le mode strict signale comme erreurs les affectations à des noms non déclarés.
2

Stocke 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éclarationUne valeur initiale est-elle nécessaire ?Le nom peut-il recevoir une nouvelle affectation ?
letNonOui
constOuiNon

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 const par défaut et let lorsque le code affectera une nouvelle valeur au nom.
  • Une déclaration const exige 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èmeType d’erreurCorrection
const rate;SyntaxErrorFournir une valeur initiale
Un deuxième let total dans une même portéeSyntaxErrorAffecter une valeur sans ajouter let
Lecture avant l’initialisationReferenceErrorInitialiser avant la lecture
Lecture d’un nom inconnu ou hors de portéeReferenceErrorCorriger le nom ou déplacer sa déclaration
Réaffectation d’une variable constTypeErrorUtiliser 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 let et const ont 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 const provoque une TypeError à l’exécution.
  • Le contenu d’un objet associé à un nom déclaré avec const peut être modifié sans réaffecter ce nom.
3

Calcule 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 let peut contenir des valeurs de types différents.
  • typeof renvoie une chaîne qui nomme le type d’une valeur.
  • undefined signifie souvent qu’aucune valeur n’a été affectée ; null indique généralement une absence volontaire.
  • typeof null donne "object" et typeof NaN donne "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érateurSignificationExemple
+, -Additionner, soustraire8 - 3 donne 5
*, /Multiplier, diviser7 / 2 donne 3.5
%Reste17 % 5 donne 2
**Puissance2 ** 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
OutilRègle de résultatExemple
Math.round()Entier le plus proche ; valeurs à mi-chemin vers l’infini positifMath.round(-2.5) donne -2
Math.floor()Vers le bas, en direction de l’infini négatifMath.floor(-2.5) donne -3
Math.ceil()Vers le haut, en direction de l’infini positifMath.ceil(2.1) donne 3
Math.trunc()Supprime la partie fractionnaire vers zéroMath.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.
  • NaN et 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.
  • length est 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.
4

Convertis 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 convertir null et undefined sans 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.
5

Compare 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 NaN avant 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
ExpressionQuand la valeur de repli remplace l’entrée
`value
value ?? fallbackUniquement 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 que null et undefined, 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 if n’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.
  • switch utilise l’égalité stricte et nécessite break pour arrêter le passage aux cas suivants.
6

Trouve 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
TypeCe qui se produitExemple
Erreur de syntaxeLe script ne peut pas être analysé ; aucune partie de ce script ne s’exécuteUne parenthèse non fermée
Erreur d’exécutionL’exécution atteint une instruction qui déclenche une exception ; les instructions précédentes ont été exécutéesLecture d’un nom inconnu
Erreur de logiqueLe code s’exécute, mais le résultat est incorrectDivision 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 ChromeRaccourciEffet
ReprendreF8Continuer jusqu’au prochain point d’arrêt ou à la fin
Pas à pas principalF10Exécuter l’instruction courante sans entrer dans une fonction appelée
Pas à pas détailléF11Entrer dans une fonction appelée lorsque le débogueur peut y accéder
Pas à pas sortantShift+F11Terminer 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

6 Leçons Interactives

1

Charge un script et lis ses premiers messages

13 étapes
Relie un petit script au HTML, choisis son mode de chargement et interprète les résultats de la console et des boîtes de dialogue.
  1. 1
    IntroductionDonne 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.

  2. 2
    ExplicationChoisis du code interne ou externe

    Un script interne contient du code entre ses balises. Un script externe utilise src pour 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 src est présent. Conserve la balise de fermeture </script> ; HTML ne traite pas cet élément comme autofermant.

  3. 3
    ExempleFais correspondre le chemin aux dossiers

    Place index.html à côté d’un dossier nommé js, avec greet.js à l’intérieur de ce dossier. Le src="js/greet.js" de la page part du dossier HTML et entre dans js.

    Dans le fichier JavaScript, écris :

    console.log("Page ready");
    

    Enregistre les deux fichiers. Un chemin greet.js chercherait à côté du fichier HTML plutôt que dans son sous-dossier et ne trouverait donc pas ce script.

  4. 4
    ExplicationExécute le script après l’analyse de la page

    Ajoute defer au 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.

  5. 5
    DéfiGarde les scripts dépendants dans l’ordre

    Une page contient setup.js suivi de display.js dans 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’attribut async sur 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 defer sur les deux scripts classiques externes, en gardant le script de préparation en premier dans le HTML.

  6. 6
    LienReconnais 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.

  7. 7
    ConseilOuvre la console de cette page

    Dans Chrome ou Edge, ouvre la console avec Ctrl+Shift+J sous Windows/Linux ou Cmd+Option+J sur Mac. Firefox utilise Ctrl+Shift+K ou Cmd+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.

  8. 8
    ExempleDistingue 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 undefined comme résultat. Lire total donne toujours 9. Le dernier appel affiche « Total: 9 » et renvoie lui-même undefined. 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.

  9. 9
    DéfiLis une déclaration dans la console

    Tu saisis let count = 6; et vois undefined. Tu saisis ensuite count + 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.

  10. 10
    ExplicationUtilise 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 comme totl = 5; signale alors une erreur au lieu de créer accidentellement un nom global.

  11. 11
    ExempleInspecte 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, et alert() affiche un message. Une boîte de dialogue attend la réponse avant que l’instruction suivante ne s’exécute.

  12. 12
    Dé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.

  13. 13
    Ré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.

2

Suis les déclarations, les mises à jour et la portée

11 étapes
Suis un total cumulé, puis prévois comment les blocs internes et les erreurs de déclaration influent sur l’exécution.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionSuis une valeur dans un programme
  2. 2
    ExplicationChoisis les déclarations selon les réaffectations
  3. 3
    ExempleLis l’ancienne valeur avant de stocker la nouvelle
  4. 4
    ExempleCalcule une valeur finale une seule fois
  5. 5
    DéfiChoisis la déclaration adaptée
  6. 6
    ExplicationPlace un résultat partagé en dehors de ses branches
  7. 7
    DéfiRepère le masquage
  8. 8
    Point cléUne liaison peut exister avant d’être prête
  9. 9
    ConseilUtilise le type d’erreur comme indice
  10. 10
    DéfiCorrige le résultat sans le rendre inaccessible
  11. 11
    RécapitulatifLis la liaison, puis la valeur
3

Calcule un total et construis son message

18 étapes
Inspecte les types, calcule et mets en forme les résultats, transforme des chaînes et assemble un message avec un littéral de gabarit.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionConserve le sens des valeurs dans le texte
  2. 2
    ExplicationInspecte une valeur avant de l’utiliser
  3. 3
    DéfiPrévois un changement de type
  4. 4
    Point cléInterprète prudemment un nom de type
  5. 5
    ExempleCalcule avant de mettre en forme
  6. 6
    ExplicationPlace toute la somme au numérateur
  7. 7
    DéfiTrouve les mètres entiers
  8. 8
    ConseilChoisis l’arrondi selon sa direction
  9. 9
    LienDistingue la précision de l’affichage
  10. 10
    ExplicationConserve le résultat d’une transformation
  11. 11
    ExempleLis des indices et une extraction
  12. 12
    DéfiNettoie d’abord, puis vérifie
  13. 13
    Point cléDétermine si une méthode renvoie du texte
  14. 14
    ExempleInsère le total calculé
  15. 15
    DéfiChoisis les délimiteurs nécessaires
  16. 16
    ExplicationLaisse l’expression choisir un mot
  17. 17
    DéfiCombine nettoyage et présentation numérique
  18. 18
    RécapitulatifInspecte un message de l’intérieur vers l’extérieur
4

Accepte une quantité sans masquer une entrée absente

12 étapes
Suis une réponse à prompt à travers la vérification de son absence, la conversion, la validation et le calcul.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionDistingue l’absence d’une valeur numérique
  2. 2
    ExempleInspecte la réponse brute
  3. 3
    ExplicationVérifie l’absence avant la conversion
  4. 4
    ExempleRejette une conversion échouée
  5. 5
    DéfiChoisis une fonction d’analyse adaptée au sens
  6. 6
    Point cléConvertis en booléen sans interpréter le mot
  7. 7
    ExempleRepère un calcul qui masque du texte
  8. 8
    ExplicationÉvalue un enchaînement depuis la gauche
  9. 9
    DéfiSuis deux mises à jour différentes
  10. 10
    ConseilCorrige l’entrée avant le total
  11. 11
    DéfiPréserve zéro tout au long du traitement
  12. 12
    RécapitulatifValide dans l’ordre où les informations sont disponibles
5

Construis une décision conforme à ses règles

15 étapes
Compare des valeurs, combine des exigences, préserve les valeurs par défaut égales à zéro et suis les branches et les cas de switch.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionTransforme une règle en décision prévisible
  2. 2
    ExplicationGarde les types visibles dans l’égalité
  3. 3
    ExempleCompare des nombres stockés comme du texte
  4. 4
    DéfiIdentifie les véritables opérandes d’une comparaison
  5. 5
    ConseilVérifie l’absence et la précision numérique
  6. 6
    ExplicationRends chaque exigence explicite
  7. 7
    ExempleRegroupe une exigence commune
  8. 8
    DéfiConserve une valeur vide lorsqu’elle est valide
  9. 9
    Point cléLe court-circuit contrôle ce qui est évalué
  10. 10
    ExempleSuis la première branche dont la condition est satisfaite
  11. 11
    DéfiChoisis une valeur ou plusieurs instructions
  12. 12
    ExplicationLis switch comme un point d’entrée
  13. 13
    DéfiPrévois l’effet du break manquant
  14. 14
    DéfiCombine conversion et ordre des branches
  15. 15
    RécapitulatifTeste la règle à ses bornes
6

Localise et corrige un total trompeur

12 étapes
Utilise les indices de la console et l’état suspendu du débogueur pour trouver une erreur de type dans un calcul qui s’exécute par ailleurs.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionTrouve où le résultat devient incorrect pour la première fois
  2. 2
    ExplicationClasse l’échec avant de modifier le code
  3. 3
    ExempleLis le nom fautif et son emplacement
  4. 4
    DéfiDistingue l’analyse syntaxique de l’exécution
  5. 5
    ConseilAffiche la première valeur inattendue
  6. 6
    ExempleReproduis la décision incorrecte
  7. 7
    ExplicationSuspends l’exécution avant la comparaison
  8. 8
    Point cléLa conversion ultérieure ne peut pas corriger l’addition
  9. 9
    DéfiInspecte avant et après une affectation
  10. 10
    ConseilChoisis la pause qui répond à la question
  11. 11
    DéfiVérifie une correction de type dans une décision
  12. 12
    RécapitulatifTeste à nouveau la correction enregistrée

JavaScript : QCM

60 Questions Pratiques en 6 séries

Série 1 : Exécute du code et suis les valeurs stockées10 Questions Pratiques

Question 1 sur 10

Une page HTML se trouve à côté d’un dossier scripts contenant start.js. Quel élément charge ce fichier après la fin de l’analyse du HTML ?
  1. <script src="start.js" defer></script>
  2. <script src="scripts/start.js" defer></script>
  3. <script src="scripts/start.js" async></script>
  4. <script defer>scripts/start.js</script>
Afficher la réponseMasquer la réponse
Réponse : B
Le chemin relatif doit inclure le dossier 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);
  1. « Old Items: 8 »
  2. « Items: 62 »
  3. « Items: 6 + 2 »
  4. « Items: 8 »
Afficher la réponseMasquer la réponse
Réponse : D
La ligne mise en commentaire est ignorée et l’expression numérique est évaluée avant l’affichage de son résultat. 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

Un programme stocke const rate = 0.15;, puis exécute rate = 0.2;. Que se passe-t-il lors de l’affectation ?
  1. Elle déclenche une TypeError.
  2. Elle fixe le taux à 0,2.
  3. Elle déclenche une SyntaxError.
  4. Elle laisse rate à undefined.
Afficher la réponseMasquer la réponse
Réponse : A
La déclaration fournit une valeur initiale valide, donc le script peut démarrer. La tentative ultérieure de réaffectation de la liaison 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);
  1. 23
  2. 10
  3. 19
  4. 14
Afficher la réponseMasquer la réponse
Réponse : C
Chaque affectation lit le solde courant, calcule le membre de droite, puis stocke la nouvelle valeur. Le solde devient 23, puis 19 : le dernier affichage donne donc 19. Garder 23 reviendrait à oublier la deuxième mise à jour ; la valeur initiale 14 n’est pas rétablie entre les instructions.

Question 5 sur 10

Quelles valeurs sont affichées, dans l’ordre ?

let level = 4;
{
  let level = 9;
  console.log(level);
}
console.log(level);
  1. 9, puis 9
  2. 4, puis 9
  3. 9, puis 4
  4. 4, puis 4
Afficher la réponseMasquer la réponse
Réponse : C
La déclaration interne crée sa propre variable à portée de bloc, qui fournit la première valeur affichée. En quittant le bloc, on retrouve la variable extérieure inchangée : la deuxième valeur est donc 4. Le résultat ne serait deux fois 9 que si l’instruction interne réaffectait la variable extérieure au lieu d’en déclarer une nouvelle.

Question 6 sur 10

Quelle chaîne de caractères typeof "28" renvoie-t-il ?
  1. "number"
  2. "string"
  3. "object"
  4. "undefined"
Afficher la réponseMasquer la réponse
Réponse : B
Les guillemets font de "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

Une longueur mesurée est de 386 cm. Quelle paire donne ses mètres entiers et les centimètres restants ?
  1. Math.floor(386 / 100) et 386 % 100
  2. 386 / 100 et 386 % 100
  3. Math.round(386 / 100) et 386 % 100
  4. Math.floor(386 / 100) et 386 / 100
Afficher la réponseMasquer la réponse
Réponse : A
Arrondir le quotient positif vers le bas donne 3 mètres entiers et le reste donne les 86 centimètres restants. La division seule donne 3,86, qui n’est pas un nombre de mètres entiers. Arrondir le quotient à l’entier le plus proche donne 4, ce qui dépasse le nombre de mètres entiers dans cette longueur.

Question 8 sur 10

Que renvoie "catalog".slice(1, 4) ?
  1. "atal"
  2. "cat"
  3. "tal"
  4. "ata"
Afficher la réponseMasquer la réponse
Réponse : D
Les positions dans une chaîne commencent à zéro, donc l’indice 1 correspond au premier « a ». 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

Un script affiche un message de démarrage, puis s’arrête avec ReferenceError: lenght is not defined. Que dois-tu inspecter en premier ?
  1. Le chemin HTML du script chargé.
  2. L’orthographe et la portée de lenght.
  3. La précision décimale de ses valeurs.
  4. Les couleurs des avertissements de la console.
Afficher la réponseMasquer la réponse
Réponse : B
Le message de démarrage montre que ce script a commencé à s’exécuter et l’erreur indique un nom qui ne peut pas être lu. Vérifie si 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);
  1. Rien ; le premier affichage atteint une zone morte temporaire.
  2. 8 ; puis la déclaration interne échoue.
  3. 12 ; puis l’affichage extérieur donne 8.
  4. undefined ; puis l’affichage extérieur donne 8.
Afficher la réponseMasquer la réponse
Réponse : A
La liaison interne 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

Que renvoie "notes.txt".endsWith(".txt") ?
  1. "txt"
  2. 5
  3. true
  4. "true"
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);
  1. 7
  2. 5
  3. 6
  4. 0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Avec const trays = 4; const massKg = 1.25;, que produit `Mass: ${(trays * massKg).toFixed(1)} kg` ?
  1. "Mass: 5 kg"
  2. "Mass: 41.25 kg"
  3. "Mass: 5.00 kg"
  4. "Mass: 5.0 kg"
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Avec const name = "Mira";, quel texte est stocké par const label = "Hello, ${name}"; ?
  1. "Hello, Mira"
  2. "Hello, ${name}"
  3. "Hello, undefined"
  4. "Hello, name"
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Quelle valeur Number("18px") produit-il ?
  1. NaN
  2. 18
  3. 0
  4. "18"
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Une boîte de dialogue demandant une quantité est annulée. Le code calcule immédiatement Number(input). Quelle valeur obtient-on et quelle information a été perdue ?
  1. NaN ; l’annulation ne se distingue plus d’un texte invalide.
  2. null ; l’annulation reste distincte d’un zéro saisi.
  3. "0" ; l’annulation ne se distingue plus d’un texte numérique.
  4. 0 ; l’annulation ne se distingue plus d’un zéro saisi.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Quels sont la valeur et le type obtenus avec 6 + 2 + "4" ?
  1. 12, nombre
  2. "624", chaîne de caractères
  3. "84", chaîne de caractères
  4. 84, nombre
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Après const shown = (7.5).toFixed(2);, que produit shown + 1 ?
  1. 8.5
  2. "7.501"
  3. "8.50"
  4. "7.51"
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une entrée est une chaîne de caractères ou 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 ?
  1. Convertir avec Number ; rejeter les nombres faux ; accepter le reste.
  2. Rejeter null ; utiliser parseFloat ; rejeter NaN ou les valeurs inférieures à 0.
  3. Rejeter null ou une entrée vide ; convertir avec Number ; rejeter les valeurs inférieures à 0.
  4. Rejeter null ou une entrée vide ; convertir avec Number ; rejeter NaN ou les valeurs inférieures à 0.
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);
  1. 58, nombre
  2. 5, nombre
  3. 59, nombre
  4. "59", chaîne de caractères
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

Quel est le résultat de "16" === 16 ?
  1. true
  2. "false"
  3. NaN
  4. false
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un capteur stocke ses mesures sous forme de chaînes. Pourquoi "24" < "8" donne-t-il true ?
  1. Les deux chaînes sont converties en nombres avant la comparaison.
  2. Les premiers caractères différents du texte sont « 2 » et « 8 ».
  3. La comparaison vérifie la valeur numérique de la chaîne la plus courte.
  4. L’opérateur inférieur à inverse l’ordre numérique pour les chaînes.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Quelle est la valeur de 0 ?? 5 ?
  1. 0
  2. 5
  3. false
  4. null
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Une mesure doit être comprise entre 12 et 28, bornes incluses. Quelle condition teste cet intervalle ?
  1. reading > 12 && reading < 28
  2. reading >= 12 || reading <= 28
  3. reading >= 12 && reading <= 28
  4. 12 <= reading <= 28
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);
  1. « silver »
  2. « bronze »
  3. « none »
  4. « bronze silver »
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Avec const active = false;, que produit active ? "Ready" : "Waiting" ?
  1. "Ready"
  2. false
  3. undefined
  4. "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);
  1. « normal »
  2. « fast »
  3. « idle »
  4. « fast normal »
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

La publication exige une approbation ainsi qu’un rôle d’éditeur ou de propriétaire. Avec 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 ?
  1. false ; utiliser approved && (isEditor || isOwner)
  2. true ; utiliser approved || (isEditor && isOwner)
  3. true ; utiliser approved && (isEditor || isOwner)
  4. false ; utiliser approved || (isEditor && isOwner)
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);
  1. « B »
  2. « BCD »
  3. « BC »
  4. « ABC »
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Pour const distance = 42;, quelles sont respectivement les valeurs de 0 < distance < 20 et de distance > 0 && distance < 20 ?
  1. false et false
  2. true et false
  3. true et true
  4. false et true
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

Un script calcule l’aire d’un rectangle en additionnant les longueurs de ses deux côtés. Il s’exécute et affiche une aire incorrecte sans message d’erreur. De quel type d’erreur s’agit-il ?
  1. Une erreur de logique.
  2. Une erreur de syntaxe.
  3. Une ReferenceError.
  4. Une erreur de chargement.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

L’exécution est suspendue sur total = total + 7; lorsque total vaut 11. Quelle valeur apparaît avant le pas à pas principal et quelle valeur apparaît après ?
  1. 18 avant ; 25 après.
  2. 11 avant ; 11 après.
  3. 11 avant ; 18 après.
  4. undefined avant ; 18 après.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Tu veux obtenir un message de diagnostic chaque fois qu’une ligne est atteinte, sans suspendre l’exécution ni modifier le script. Quelle fonctionnalité du débogueur convient ?
  1. Un point d’arrêt sur une ligne.
  2. Un point d’arrêt conditionnel.
  3. Un point d’arrêt sur exception.
  4. Un point de journalisation.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un affichage de console placé au début d’un script est absent et la console indique une erreur 404 pour l’URL de ce script. Que dois-tu vérifier en premier ?
  1. Le type du total final calculé par le script.
  2. Le chemin du script et la présence du fichier à cet endroit.
  3. L’ordre des conditions dans le script chargé.
  4. La portée des variables après sa dernière instruction.
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;
  1. Il affiche « Begin », puis s’arrête avec une TypeError.
  2. Une SyntaxError empêche toutes les lignes de ce script de s’exécuter.
  3. Il affiche « Begin », puis donne la valeur 7 à size.
  4. Il affiche « Begin », puis s’arrête avec une ReferenceError.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un total est incorrect. Les affichages indiquent base: 13 number, extra: 4 string et total: 134 string. Par où faut-il commencer la correction ?
  1. Convertir le total concaténé après l’addition.
  2. Mettre le total concaténé en forme avec deux décimales.
  3. Modifier le libellé affiché à côté du total.
  4. Convertir l’entrée supplémentaire avant l’addition.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Un programme suspendu affiche raw = "27", fee = 6 et total = "276" juste avant if (total > 100). Quelle modification corrige le classement erroné du total comme élevé ?
  1. Utiliser Number(raw) + fee pour calculer total.
  2. Utiliser Number(total) > 100 dans la condition.
  3. Utiliser total >= 100 dans la condition.
  4. Utiliser total === "276" dans la condition.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un script exécuté au chargement affiche un résultat incorrect. Tu places un point d’arrêt sur son calcul après la fin du chargement de la page, mais l’exécution ne se suspend jamais. Comment inspecter le calcul et le résultat affecté ?
  1. Reprendre le script terminé, puis inspecter l’ancien résultat de l’affectation.
  2. Entrer pas à pas dans la page terminée, puis inspecter son texte source d’origine.
  3. Recharger pour atteindre le point d’arrêt, puis exécuter l’affectation en pas à pas principal.
  4. Déplacer le point d’arrêt après le script, puis attendre qu’il se relance tout seul.
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é.

  1. Aucun message ; la mise à jour provoque une SyntaxError.
  2. Les deux messages ; la valeur manquante devient NaN.
  3. Seulement « Two » ; l’affichage précédent est annulé.
  4. Seulement « One » ; la mise à jour déclenche une ReferenceError.
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);
  1. Null déclenche une TypeError ; le texte affiche 7.
  2. Null affiche 0 ; le texte affiche 7.
  3. Null déclenche une TypeError ; le texte affiche "52".
  4. Null affiche 0 ; le texte affiche "52".
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

Que renvoie Math.floor(-3.2) ?
  1. -3
  2. -4
  3. 4
  4. 3
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Avec const count = 2;, quel message produit `Packed ${count} ${count === 1 ? "box" : "boxes"}` ?
  1. « Packed 2 box »
  2. « Packed 2 false »
  3. « Packed 2 boxes »
  4. « Packed count boxes »
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une vérification de suffixe doit accepter toutes les casses. Pour const label = "Draft.PDF";, quelle expression reconnaît la terminaison PDF ?
  1. label.toLowerCase().endsWith(".pdf")
  2. label.endsWith(".pdf")
  3. label.trim().endsWith(".pdf")
  4. label.toUpperCase().endsWith(".pdf")
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Le résultat d’une conversion numérique échouée est stocké dans value. Quel test détecte correctement que cette valeur est NaN ?
  1. value === NaN
  2. typeof value === "NaN"
  3. value == NaN
  4. Number.isNaN(value)
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;
  1. saved = 9, total = 18
  2. saved = 8, total = 16
  3. saved = 9, total = 19
  4. saved = 8, total = 19
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un décompte doit prendre la valeur par défaut 3 uniquement lorsque le décompte d’origine vaut null ou undefined. Quels sont les résultats respectifs de count ?? 3 et de count || 3 lorsque count vaut 0, et quelle expression respecte la règle ?
  1. 3 et 3 ; les deux expressions respectent la règle.
  2. 0 et 0 ; les deux expressions respectent la règle.
  3. 0 et 3 ; l’expression avec coalescence des nuls respecte la règle.
  4. 3 et 0 ; l’expression avec OU 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";
}
  1. Il affecte « gold » ; tester 70 avant 90.
  2. Il affecte « silver » ; tester 90 avant 70.
  3. Il affecte « silver » ; remplacer >= 90 par > 90.
  4. Il affecte « none » ; remplacer >= 70 par > 70.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Après avoir converti une réponse à prompt, un programme utilise 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 ?
  1. Elle rejette zéro et NaN, mais accepte le nombre négatif.
  2. Elle accepte zéro, mais rejette NaN et le nombre négatif.
  3. Elle rejette les trois, car aucun n’est un nombre positif.
  4. Elle accepte les trois, car les réponses à prompt sont des chaînes.
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);
  1. 0 empty
  2. 0 ready
  3. 3 ready
  4. 3 empty
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un total ne dépasse sa limite que pour certaines entrées. Tu as besoin de toutes les valeurs locales à la première ligne de la branche des totaux élevés, sans suspendre l’exécution pour les cas ordinaires. Que dois-tu placer et inspecter ?
  1. Un point de journalisation sur cette ligne ; inspecter le volet Portée en pause.
  2. Un point d’arrêt conditionnel sur cette ligne ; inspecter Portée et Expressions espionnes.
  3. Un point d’arrêt après la fin de l’exécution ; inspecter les valeurs précédentes.
  4. Un point d’arrêt sur exception ; attendre que le total incorrect déclenche une erreur.
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

Deux scripts classiques externes dépendent de leur ordre dans le HTML et doivent s’exécuter après l’analyse du document. Quel attribut de chargement doivent-ils tous deux utiliser ?
  1. async
  2. src seul
  3. defer sur des copies internes uniquement
  4. defer
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un affichage montre une valeur dont le typeof est "number", mais qui n’est jamais égale à elle-même. Quelle est cette valeur et comment la tester directement ?
  1. NaN ; utiliser Number.isNaN(value).
  2. null ; utiliser value === null.
  3. undefined ; utiliser value === undefined.
  4. Infinity ; utiliser value === Infinity.
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);
  1. « Load: 11 kg »
  2. « Load: 2.754 kg »
  3. « Load: 11.00 kg »
  4. « Load: 11.0 kg »
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Tu places un point d’arrêt sur const cleaned = raw.trim(); et l’exécution s’y suspend. Comment obtenir et inspecter la valeur initialisée de cleaned ?
  1. Inspecter cleaned avant d’exécuter l’instruction.
  2. Exécuter l’instruction en pas à pas principal, puis inspecter cleaned.
  3. Reprendre et attendre une pause à la ligne suivante.
  4. Utiliser le pas à pas sortant pour ignorer l’initialisation de la variable.
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);
  1. "363" et "186"
  2. 39 et 42
  3. 39 et "186"
  4. "363" et 42
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";
  1. ""
  2. "Guest"
  3. false
  4. null
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);
  1. « M »
  2. « MN »
  3. « X »
  4. « MNX »
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);
  1. Remplacer la déclaration extérieure par const label = "pending";.
  2. Remplacer la déclaration interne par const label = "sent";.
  3. Supprimer la déclaration extérieure et garder l’affichage final.
  4. Remplacer la ligne interne par label = "sent";.
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Une mesure peut être null, NaN ou un nombre. L’intervalle valide inclut 0 et 10. Quel test accepte exactement les valeurs numériques de cet intervalle ?
  1. !Number.isNaN(value) && value >= 0 && value <= 10
  2. value !== null && !Number.isNaN(value) && value > 0 && value < 10
  3. value !== null && !Number.isNaN(value) && value >= 0 && value <= 10
  4. value !== null && !Number.isNaN(value) && (value >= 0 || value <= 10)
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Un script se charge sans erreur, mais affiche une moyenne de 32 pour les mesures 8, 12 et 36. La somme affichée est 56 ; le calcul est 8 + 12 + 36 / 3. Quels diagnostic et correction correspondent à tous ces indices ?
  1. Seul 36 est divisé ; utiliser (8 + 12 + 36) / 2.
  2. Seule une partie de la somme doit être regroupée ; utiliser 8 + (12 + 36) / 3.
  3. Les deux premières valeurs doivent être regroupées ; utiliser (8 + 12) / 3 + 36.
  4. Seul 36 est divisé ; utiliser (8 + 12 + 36) / 3.
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

85 Mots-Clés, chacun avec sa définition

A

affectation
Une affectation évalue une expression à droite et stocke sa valeur dans la liaison nommée à gauche, à l’aide de l’opérateur =.
La mise à jour count = count + 1; utilise l’ancien décompte pour calculer la valeur qui le remplace.
affectation composée
Une affectation composée combine une opération avec le stockage de son résultat, à l’aide d’un opérateur comme +=, -= ou *= sur une variable existante.
Pour 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
L’analyse du préfixe numérique lit un nombre au début d’un texte et s’arrête au premier caractère qui ne convient pas à ce nombre.
L’appel parseFloat("6.2 kg") lit 6.2, tandis que Number("6.2 kg") rejette toute la chaîne et donne NaN.
attribut async
L’attribut async permet à un script de se télécharger pendant l’analyse et de s’exécuter dès qu’il est prêt, sans préserver l’ordre du HTML.
Un compteur de visiteurs indépendant peut utiliser async lorsqu’aucun autre script ne dépend de son exécution préalable.
attribut defer
L’attribut defer fait exécuter un script classique externe après l’analyse du HTML, tout en permettant son téléchargement pendant cette analyse.
Deux scripts classiques externes avec 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
Une base de numération est la base utilisée pour interpréter des chiffres ; parseInt() l’accepte comme second argument afin de rendre la base voulue explicite.
Utiliser parseInt("11", 10) lit onze en décimal, tandis que parseInt("11", 16) lit dix-sept en décimal.
booléen
Un booléen est l’une des deux valeurs true et false, généralement produites par des comparaisons et utilisées pour représenter des résultats de type oui ou non.
L’expression heightM >= 2 renvoie un booléen qui permet de décider si une hauteur respecte une exigence.
branche
Une branche est un bloc de code sélectionné par une condition, qui permet à un programme d’exécuter des instructions différentes selon les cas.
Une branche else peut affecter des frais de livraison lorsque la condition de livraison gratuite a été évaluée comme une valeur fausse.

C

camelCase
Le camelCase est un style de nommage dans lequel un nom composé de plusieurs mots commence par une minuscule et chaque mot suivant par une majuscule, sans espaces.
Les noms firstName et totalMassKg montrent les limites des mots tout en restant des noms JavaScript valides.
cas par défaut
Un cas par défaut est le point d’entrée d’un switch utilisé lorsqu’aucune valeur case ne correspond à l’entrée ; il fournit un comportement pour les valeurs sans correspondance.
Un switch de mode peut affecter "normal" dans default lorsque l’entrée ne correspond à aucun de ses modes spéciaux nommés.
chaînage de méthodes
Le chaînage de méthodes appelle une méthode sur la valeur renvoyée par l’appel précédent, ce qui permet d’écrire des transformations compatibles à la suite.
L’expression " Note ".trim().toLowerCase() supprime d’abord les espaces extérieures, puis modifie la casse du résultat.
chaîne de caractères
Une chaîne de caractères est une séquence immuable d’unités de code UTF-16 utilisée pour représenter du texte, écrite entre des guillemets correspondants ou des accents graves.
Les chiffres dans "203" forment du texte qui peut être assemblé ou parcouru par une recherche sans devenir le nombre 203.
coalescence des nuls
La coalescence des nuls est l’opérateur ??, qui ne choisit une valeur de repli que pour null ou undefined et préserve les autres valeurs fausses.
Si count vaut 0, count ?? 3 conserve zéro, tandis que count || 3 le remplace par la valeur de repli.
commentaire
Un commentaire est du texte destiné aux lecteurs et ignoré par JavaScript pendant l’exécution, marqué par // ou par une paire correspondante /* et */.
Placer // devant un affichage temporaire empêche son exécution tout en conservant le texte pour plus tard.
comparaison
Une comparaison évalue une relation entre des valeurs et produit true ou false, par exemple pour une égalité, une inégalité ou une borne.
La comparaison massKg <= 20 inclut exactement 20 et peut être stockée comme résultat booléen d’un test de limite.
comparaison d’ordre
Une comparaison d’ordre teste l’ordre avec <, >, <= ou >= ; deux chaînes utilisent l’ordre du texte, tandis que des opérandes de types différents comparés numériquement peuvent être convertis.
Le test "30" < "7" est vrai comme comparaison de texte, mais convertir les deux valeurs en nombres inverse ce résultat.
concaténation
La concaténation assemble des valeurs textuelles en une nouvelle chaîne ; l’opérateur + effectue cette opération lorsque ses opérandes primitifs ordinaires comprennent une chaîne.
Assembler "Good" + " " + "morning" inclut une espace, car la chaîne du milieu la fournit explicitement.
console
La console est un panneau des outils de développement qui affiche les messages et les erreurs des scripts et permet d’évaluer des expressions JavaScript.
Saisir 6 * 7 dans la console de la page affiche 42 sans ajouter d’instruction au script enregistré.
contexte booléen
Un contexte booléen est un endroit où le caractère vrai ou faux d’une valeur détermine le comportement, comme une condition if ou le test d’un opérateur logique.
Un surnom non vide satisfait un test if, mais une chaîne vide échoue, bien que les deux valeurs soient de type string.
conversion explicite
Une conversion explicite est un changement de type écrit volontairement par le programmeur, à l’aide d’une opération comme Number(), String() ou Boolean().
Convertir input avant d’ajouter des frais indique clairement que le programme attend un total numérique.
conversion implicite
La conversion implicite est la conversion automatique du type d’une valeur par un opérateur ou une condition, selon les règles de JavaScript pour cette opération.
Dans "8" * 2, la multiplication convertit implicitement le texte en nombre pour le calcul et produit 16.
conversion numérique implicite
La conversion numérique implicite est la conversion automatique en une valeur numérique pendant une opération qui attend des nombres, comme une soustraction.
L’expression "14" - 2 produit 12 sans modifier une variable qui contenait à l’origine la chaîne.

D

débogueur
Un débogueur est un outil de développement qui peut suspendre l’exécution, inspecter les valeurs dans la portée suspendue et avancer pas à pas dans le code.
Suspendre l’exécution avant une condition qui utilise un total peut révéler que ce total est du texte assemblé, même si la condition le convertit ensuite en nombre.
déclaration
Une déclaration introduit un nom dans une portée à l’aide d’un mot-clé comme let ou const et peut aussi fournir sa valeur initiale.
L’instruction 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
Un enchaînement de conditions else if est une série ordonnée de conditions qui exécute la première branche dont la condition est satisfaite et ignore toutes les branches suivantes.
Vérifier d’abord le score minimal le plus élevé empêche un seuil inférieur de retenir trop tôt un résultat plus élevé.
erreur d’exécution
Une erreur d’exécution est une exception déclenchée pendant l’exécution du code ; si elle n’est pas gérée, elle arrête cette exécution à l’opération fautive.
Une variable inconnue sur une ligne ultérieure peut arrêter le script après l’exécution de ses instructions d’affichage précédentes.
erreur de logique
Une erreur de logique est une erreur dans le raisonnement ou le calcul d’un programme qui laisse le code s’exécuter, mais produit un résultat incorrect.
Diviser uniquement le dernier nombre d’une somme peut afficher une moyenne incorrecte sans produire de message d’erreur automatique.
erreur de syntaxe
Une erreur de syntaxe est une violation de la grammaire de JavaScript qui empêche l’analyse du script concerné et le début de son exécution.
Une parenthèse non fermée peut empêcher même un affichage de démarrage antérieur du même script de s’exécuter.
espace réservé
Un espace réservé est la partie ${...} d’un littéral de gabarit où une expression est évaluée et où sa forme textuelle est insérée.
Dans `Mass: ${count * massKg} kg`, l’espace réservé calcule le total avant de l’insérer.
ET logique
Le ET logique est l’opérateur &&, qui exige que les deux tests booléens soient satisfaits et arrête l’évaluation à son premier opérande qui est une valeur fausse.
Un test d’intervalle relie les bornes inférieure et supérieure avec && afin qu’une mesure doive satisfaire les deux exigences.
expression
Une expression est du code JavaScript dont l’évaluation produit une valeur qu’une autre expression ou instruction peut utiliser pour la suite.
L’expression price * count peut fournir une valeur à une affectation ou à un espace réservé de gabarit.
expression espionne
Une expression espionne est une expression que le débogueur réévalue pendant l’exécution pas à pas afin de permettre le suivi d’une valeur ou d’une condition entre les pauses.
Ajouter typeof total aux expressions espionnes peut révéler l’instruction exacte où une valeur numérique devient une chaîne.

É

égalité faible
L’égalité faible est la comparaison effectuée par ==, qui peut convertir des opérandes de types différents selon ses propres règles d’égalité.
L’expression "12" == 12 est vraie après conversion ; l’égalité stricte permet donc une vérification de type plus prévisible.
égalité stricte
L’égalité stricte est la comparaison effectuée par ===, qui ne convertit pas les types des opérandes et considère les valeurs de types différents comme inégales.
L’expression "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
L’évaluation en court-circuit ignore un opérande dès qu’un opérande précédent détermine le résultat, comme avec un opérande gauche qui est une valeur fausse pour ET.
Tester d’abord input !== null dans une protection avec ET peut empêcher un appel risqué à input.trim() lorsque input vaut null.

I

immutabilité
L’immutabilité signifie que le contenu d’une valeur ne peut pas changer sur place ; les opérations sur les valeurs primitives produisent plutôt de nouvelles valeurs.
L’affectation text = text.trim(); remplace la valeur de la variable par une nouvelle chaîne au lieu de modifier l’ancienne.
incrémentation postfixée
L’incrémentation postfixée est la forme name++ qui augmente la variable de un, mais renvoie son ancienne valeur à l’expression qui l’entoure.
Avec let n = 3; const old = n++;, old reçoit 3 tandis que n devient 4 après sa mise à jour.
indice
Un indice est une position numérotée utilisée pour accéder aux unités de code d’une chaîne. Les indices commencent à zéro et vont jusqu’à la longueur moins un.
Dans "planet", l’indice 0 contient "p" et l’indice 5 contient "t" ; l’indice 6 est au-delà de la fin.
Infinity
Infinity est une valeur numérique particulière représentant un résultat positif non borné ; JavaScript possède aussi la valeur Infinity négative.
Le calcul 8 / 0 renvoie Infinity : une division par zéro ne déclenche donc pas toujours une exception.
initialisation
L’initialisation donne à une liaison déclarée sa valeur de départ ; une déclaration const doit inclure cette valeur dans la déclaration elle-même.
Dans const widthM = 4;, le nombre 4 est la valeur initiale qui rend la liaison prête à être lue.
instruction
Une instruction est une consigne JavaScript qui effectue une action, comme déclarer une variable, affecter une valeur ou choisir une branche.
Dans let score = 8; console.log(score);, l’instruction de déclaration s’exécute avant l’instruction d’affichage.
instruction switch
Une instruction switch compare strictement une valeur aux libellés case, entre au point correspondant et continue jusqu’à un break ou à la fin.
Une valeur de type chaîne "4" ignore un case 4: numérique, sauf si l’entrée a été convertie avant le switch.
interpolation
L’interpolation est l’insertion d’une expression évaluée dans le texte qui l’entoure, comme le fait JavaScript dans les espaces réservés de gabarit.
Avec name = "Nora", l’interpolation dans `Hello, ${name}` crée la salutation « Hello, Nora ».

L

liaison
Une liaison est l’association entre un nom et la valeur qu’il désigne ; const empêche de remplacer cette association après l’initialisation.
Modifier une propriété d’un objet const préserve sa liaison, car le nom désigne toujours le même objet.
littéral de gabarit
Un littéral de gabarit est une chaîne délimitée par des accents graves qui permet d’intégrer des expressions et des sauts de ligne littéraux dans son texte.
Un message comme `Count: ${count}` place le décompte courant à côté de son libellé descriptif.
lois de De Morgan
Les lois de De Morgan décrivent comment la négation d’un test booléen combiné inverse chaque opérande et remplace ET par OU ou OU par ET.
Une valeur extérieure à un intervalle bornes comprises est inférieure à sa borne inférieure OU supérieure à sa borne supérieure, ce qui inverse le test d’appartenance.

M

masquage
Le masquage se produit lorsqu’une portée interne déclare un nom déjà utilisé dans une portée extérieure, cachant la liaison extérieure dans la portée interne.
Déclarer let total = 2 dans un bloc laisse une variable total extérieure distincte inchangée à la fin du bloc.
méthode
Une méthode est une fonction accessible par une valeur ou un objet et appelée avec des parenthèses pour effectuer une opération sur cette valeur ou cet objet.
L’appel label.toLowerCase() produit du texte en minuscules, tandis que l’omission des parenthèses n’appelle pas la méthode.
mise en forme
La mise en forme modifie la présentation textuelle d’une valeur, par exemple en ajoutant un nombre fixe de décimales, tout en laissant le nombre d’origine inchangé.
Utiliser (6).toFixed(2) dans un gabarit affiche "6.00" sans modifier la valeur numérique d’origine.
mode strict
Le mode strict est un mode d’exécution JavaScript qui transforme certaines erreurs silencieuses, notamment les affectations à des noms non déclarés, en erreurs signalées.
Commencer un script classique par "use strict"; aide à repérer une variable mal orthographiée dès sa première affectation.
moteur JavaScript
Un moteur JavaScript est le composant du navigateur qui lit et exécute le code JavaScript, effectuant les calculs et appliquant les décisions du programme.
Lorsque la page charge son script, le moteur exécute console.log("Ready"); et la console affiche « Ready ».

N

NaN
NaN est une valeur particulière du type number qui indique un résultat ou une conversion numérique invalide et n’est pas égale à elle-même.
Convertir "heavy" avec Number() produit NaN, que Number.isNaN() peut détecter avant un calcul.
NON logique
Le NON logique est l’opérateur !, qui convertit un opérande en booléen et l’inverse ; l’appliquer deux fois donne son caractère vrai ou faux sous forme de booléen.
L’expression !"0" est fausse, car la chaîne non vide est une valeur vraie avant que sa valeur booléenne soit inversée.
null
Null est une valeur primitive généralement affectée intentionnellement pour représenter une valeur vide ou absente dans les données propres à un programme.
Une boîte de dialogue prompt annulée renvoie null, que le programme peut vérifier avant de tenter d’appeler une méthode de chaîne.

O

opérateur arithmétique
Un opérateur arithmétique effectue un calcul comme une addition, une soustraction, une multiplication, une division, un reste ou une puissance.
L’expression massKg * count utilise la multiplication pour calculer la masse totale à partir de deux valeurs numériques.
opérateur conditionnel
L’opérateur conditionnel est l’expression condition ? a : b, qui évalue une condition et renvoie la valeur de l’expression sélectionnée.
Une courte affectation peut choisir "open" ou "closed" à partir d’un booléen sans écrire deux branches d’affectation séparées.
OU logique
Le OU logique est l’opérateur ||, dont la condition est satisfaite lorsqu’au moins un test booléen l’est et qui arrête l’évaluation à son premier opérande qui est une valeur vraie.
Un indicateur de membre ou un total admissible peut satisfaire une condition de livraison ; les deux n’ont pas besoin d’être satisfaits ensemble.

P

pas à pas principal
Le pas à pas principal est une commande du débogueur qui exécute l’instruction courante et suspend à nouveau l’exécution sans entrer dans les fonctions appelées par cette instruction.
Exécute une affectation en pas à pas principal avant d’inspecter son nouveau résultat, car la ligne mise en évidence ne s’est pas encore exécutée au moment de la pause.
passage au cas suivant
Le passage au cas suivant est la poursuite de l’exécution depuis un cas switch correspondant vers les cas ultérieurs, parce qu’aucun break ou autre sortie ne l’a arrêtée.
Des libellés case placés les uns à la suite des autres peuvent partager intentionnellement une affectation, mais un break manquant peut aussi ajouter un second libellé non voulu.
plus unaire
Le plus unaire est l’opérateur + appliqué à un seul opérande pour demander une conversion numérique, plutôt que pour additionner deux opérandes.
L’expression +"31" produit le nombre 31, tandis que "31" + 1 assemble du texte et produit "311".
point d’arrêt
Un point d’arrêt marque un endroit où l’exécution doit être suspendue avant une instruction, afin de permettre l’inspection de l’état courant du programme.
Après avoir placé un point d’arrêt dans un script exécuté au chargement, recharge la page pour que l’exécution atteigne à nouveau cette instruction.
point d’arrêt conditionnel
Un point d’arrêt conditionnel ne suspend l’exécution à sa ligne que lorsqu’une expression fournie est vraie, ce qui aide à concentrer l’inspection sur les cas pertinents.
Un point d’arrêt avec la condition total > 200 ignore les totaux ordinaires plus petits et suspend l’exécution lorsqu’un résultat élevé doit être inspecté.
point de journalisation
Un point de journalisation est un marqueur du débogueur qui affiche un message lorsque l’exécution atteint sa ligne, sans suspendre l’exécution ni modifier le script.
Un point de journalisation peut afficher chaque valeur atteinte pendant que la page continue de fonctionner, contrairement à un point d’arrêt qui suspend l’exécution.
portée de bloc
La portée de bloc d’une liaison let ou const est la région constituée du bloc qui la contient et de ses blocs imbriqués.
Une variable 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
La portée globale est la portée étendue à toute la page des liaisons de niveau supérieur des scripts classiques, accessibles aux autres scripts classiques après leur initialisation.
Un script classique ultérieur peut lire un let count de niveau supérieur établi par un script classique précédent.
priorité des opérateurs
La priorité des opérateurs est la règle qui détermine quels opérateurs sont appliqués en premier dans une expression, sauf si des parenthèses modifient le regroupement.
Dans 4 + 6 * 2, la multiplication s’exécute avant l’addition : le résultat est donc 16 au lieu de 20.

R

ReferenceError
Une ReferenceError est une erreur déclenchée lorsqu’une liaison est inaccessible, par exemple parce que son nom est inconnu ou qu’elle n’est pas initialisée.
Une faute de frappe dans totl + 5 peut déclencher une ReferenceError même si une variable total correctement orthographiée existe à proximité.
reste
Un reste est la valeur qui subsiste après une division entière ; l’opérateur % de JavaScript produit cette valeur.
Pour une longueur positive de 478 cm, 478 % 100 donne les 78 cm restants après les mètres entiers.

S

script de module
Un script de module est un script chargé avec type="module" qui possède sa propre portée de niveau supérieur, utilise le mode strict et est différé par défaut.
Une page servie localement peut charger <script type="module" src="js/main.js"></script> pour son code de module.
script externe
Un script externe est du JavaScript stocké dans un fichier séparé qu’un élément script HTML charge au moyen de son attribut src.
L’élément <script src="js/start.js"></script> relie la page à du code situé dans un sous-dossier.
script interne
Un script interne est du JavaScript écrit dans un élément script d’un document HTML, entre ses balises d’ouverture et de fermeture.
Un court bloc <script>console.log("Hello");</script> peut afficher un message directement depuis une page HTML.
séquence d’échappement
Une séquence d’échappement commence par une barre oblique inverse et représente un caractère comme un guillemet, un saut de ligne, une tabulation ou une barre oblique inverse dans une chaîne.
La séquence 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
Le suivi de l’exécution consiste à suivre l’exécution et les valeurs intermédiaires pour situer le premier écart entre le comportement observé et le résultat attendu.
Afficher séparément la somme et le diviseur peut permettre de situer une moyenne incorrecte à l’étape où les opérations sont regroupées.

T

tolérance
Une tolérance est une limite choisie pour une différence numérique acceptable, utilisée lorsque la précision d’un calcul rend l’égalité exacte inadaptée.
Comparer une différence décimale absolue à une petite limite peut accepter les écarts d’arrondi sans exiger une égalité exacte.
typage dynamique
Le typage dynamique signifie que les valeurs portent des types, tandis qu’une variable peut désigner des valeurs de types différents après réaffectation.
Après let data = 5; data = "five";, typeof data indique le type de la nouvelle valeur de type chaîne.
type de données
Un type de données est une catégorie de valeurs qui aide à déterminer quelles opérations s’appliquent et comment elles traitent ces valeurs.
Les valeurs 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
Une TypeError est une erreur déclenchée lorsqu’une opération ne convient pas à sa valeur, notamment lors d’un appel invalide ou d’une réaffectation interdite de const.
Appeler text.length() traite une propriété numérique comme une fonction : l’opération déclenche donc une TypeError.

U

undefined
Undefined est la valeur primitive généralement utilisée lorsqu’aucune valeur n’a été fournie, par exemple après l’exécution d’une déclaration let sans valeur initiale.
Après let nickname;, lire la liaison initialisée donne undefined jusqu’à une nouvelle affectation.

V

valeur fausse
Une valeur fausse est une valeur qui devient false lors d’une conversion booléenne, notamment zéro, le texte vide, null, undefined et NaN.
Une quantité numérique de 0 fait ignorer le bloc if (quantity), même lorsque zéro est une réponse autorisée dans le programme.
valeur primitive
Une valeur primitive est une valeur de l’un des sept types primitifs de JavaScript, dont le contenu ne peut pas être modifié sur place.
Une méthode de chaîne renvoie une nouvelle valeur textuelle ; elle ne peut pas réécrire le contenu de la chaîne d’origine.
valeur vraie
Une valeur vraie est une valeur qui devient true lors d’une conversion booléenne ; les chaînes non vides sont des valeurs vraies quel que soit leur contenu.
Les chaînes "false" et "0" satisfont les tests de valeur vraie, car chacune contient des caractères au lieu d’être vide.
validation des entrées
La validation des entrées vérifie si une valeur saisie respecte les exigences d’un programme avant que cette valeur soit utilisée par la suite.
Une vérification de quantité peut d’abord rejeter l’annulation et le texte vide, puis rejeter NaN ou les nombres négatifs après conversion.
variable
Une variable est une liaison nommée qui désigne une valeur afin que le programme puisse la relire et, si la liaison le permet, lui affecter une nouvelle valeur.
Un nom comme distanceKm garde la distance mesurée disponible pour des calculs et des messages ultérieurs.
virgule flottante
La virgule flottante est une représentation des nombres utilisant un ensemble fini de chiffres binaires, si bien que de nombreuses fractions décimales sont stockées de façon approximative.
Une somme comme 0.1 + 0.2 peut afficher des chiffres supplémentaires à la fin, car les fractions stockées sont approximatives.

Z

zone morte temporaire
La zone morte temporaire est la partie de la portée d’une liaison qui précède son initialisation et où l’accès à une variable let ou const déclenche une ReferenceError.
Un 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é

Par StudeliSignaler une erreur

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.

Commencer