Le mode strict
Comme nous avons pu le constater, certaines libertés autorisées dans le langage peuvent être sources d'erreurs. Certaines bonnes pratiques peuvent être imposées en passant en mode strict.
Le passage en mode strict s'effectue au sein de chaque fonction ou pour l'ensemble du script en ajoutant ceci comme première ligne:
"use strict"; //mode strict pour l'ensemble du script
function doSomething() {
"use strict"; //mode strict pour cette fonction uniquement
...
}
Toute classe ou module JavaScript est par défaut en mode strict !
Pour rappel, en JS une fonction n'est pas obligatoirement inclue dans une classe ou un module.
Les contraintes imposées par le mode strict sont les suivantes:
Obligation de déclarer les variables
Toute variable doit être déclarée par "let" ou "var" avant de pouvoir être utilisée.
Noms de paramètres d'une fonction distincts
Les noms de paramètres d'une fonction doivent être tous différents.
Question
Qu'affiche le code ci-dessus dans la console ?Réponse
"8" puisque x prend la valeur du second paramètre qui écrase le premier.
Certains noms sont réservés aux mots-clefs du langage
Contrairement à bien des langages de programmation, JavaScript bloque sans avertir les affectations sur certains mots-clefs comme "undefined", "arguments", "let", ...
Question
arguments = [10, 5];
function diff(a, b){
if (a === arguments[0]){
return a;
} else {
return "diff";
}
}
console.log(diff(3, 4));
Réponse
"3" et non "diff" puisque la modification d'"arguments" est ignorée et reste équivalent au tableau des arguments reçus.
Testez à présent ce code en ajoutant "use strict"; en première ligne en dehors de la fonction.
Littéral octal interdit
La présence d'un "0" devant un nombre pour indiquer que le littéral est un octal peut provoquer des erreurs.
doit être remplacé par :