Mode strict
Quelques erreurs passaient sans bruit. Le mode strict les refuse. Placez "use strict" en tête. Alors size = "regular", sans let et sans const, ne crée pas de global : le moteur lève ReferenceError. La ligne de la page est ReferenceError.
Deux pages déjà vues, un autre échec
La liste s'est arrêtée sur done: buy tea. La page des erreurs a lancé new Error("missing size") exprès, et catch a lu ce message. Ici vous ne lancez pas votre propre Error. Le moteur lance, parce que size n'a jamais été déclaré. console.error ne lance toujours pas.
La directive n'a qu'une place
"use strict" ne compte que comme première instruction du script, ou comme première instruction dans une seule fonction. Une chaîne plus loin ne change rien. Une fonction peut être stricte pendant que le reste ne l'est pas. Les modules sont déjà stricts, donc la directive y est en trop.
setSize, avant l'exemple
setSize affecte size sans le déclarer. L'appel est dans try. Aucun size global n'est créé.
"use strict";
function setSize() {
size = "regular";
}
try {
setSize();
} catch (error) {
console.log(error.name);
}
Le journal affiche ReferenceError. La réparation : let size = "regular". Avec drink qui vaut tea et ce size déclaré, label peut renvoyer tea / regular. Écrire order.size est l'autre réparation qui tient, car ce nom existe.
Appel par le nom, appel sur l'objet
Appeler la fonction par son nom ne règle pas this. En mode strict, this vaut undefined. Appeler la méthode sur order règle this sur cet objet, donc this.drink vaut tea.
"use strict";
function bare() {
return this;
}
const order = {
drink: "tea",
label() {
return this.drink;
}
};
console.log(bare());
console.log(order.label());
Les journaux donnent undefined, puis tea. Ne lisez pas this.drink dans bare. Il n'y a pas d'objet, et cette lecture lance.
Quatre différences
À gauche, l'ancien comportement silencieux. À droite, l'effet de la directive.
📊 Ce que la directive change
| Ancien comportement silencieux | Avec "use strict" |
|---|---|
| size = "regular" sans déclaration crée un global | ReferenceError |
| this dans bare est l'objet global | undefined |
| Paramètre en double, le dernier l'emporte | SyntaxError |
| delete sur une variable déclarée renvoie false | SyntaxError |
Un paramètre en double, ou delete size, échoue pendant la lecture du script : c'est un SyntaxError, et try ne l'attrape pas. Le ReferenceError de l'affectation arrive quand la fonction tourne, donc catch le voit. delete order.drink reste permis dans les deux modes si la propriété peut être retirée.
Ce que fait la page
La page est un seul script strict. L'affectation échoue, et le nom de l'erreur est écrit sur la page.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
"use strict";
const line = document.querySelector("#line");
try {
size = "regular";
} catch (error) {
line.textContent = error.name;
}
</script>
</body>
</html>
La ligne se lit ReferenceError. Pas done: buy tea. Pas caught / missing size. Ajoutez let devant size et ce catch ne tourne plus.
Cinq essais courts
- Lancez setSize sous "use strict". Le journal est ReferenceError.
- Passez l'affectation à let size = "regular". Le lancement disparaît.
- Appelez bare(). La valeur est undefined.
- Appelez order.label(). La valeur est tea.
- Lisez la page. La ligne est ReferenceError.
Les vrais ratés
- Mettre la directive après une autre instruction
- Attendre qu'une affectation sans déclaration crée un global
- Lire this.drink dans un appel bare
- Attraper un paramètre en double avec try
- Lire la ligne comme done: buy tea
- La lire comme caught / missing size
Gardez ceci
- La directive d'abord
- size = "regular" sans déclaration lève ReferenceError
- this dans bare vaut undefined, et order.label() renvoie tea
- Les paramètres en double et delete sur une variable sont des SyntaxError
- La ligne de la page est ReferenceError
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut