À quoi sert le "strict-mode" en Javascript ?

Découvrez les principales règles qui vont impacter votre code, ainsi que les avantages de ce mode d'interprétation !

Article publié le 02/02/2021, dernière mise à jour le 22/09/2023

Avec l'arrivée de la version 5 d'ECMAScript (sortie en 2009) est apparue une fonctionnalité permettant de passer du mode d'interprétation "classique" de Javascript, à un mode plus "strict" du langage.

Pour activer ce mode d'interprétation, il suffit de le spécifier tout en haut de votre script, comme dans l'exemple ci-dessous :


'use strict';
// Javascript code starting here

À noter que le "strict-mode" peut n'être activé qu'au niveau de certaines fonction si besoin, pour se faire il suffit de rajouter la ligne 'use strict' au début du code de la fonction en question.

La fonctionnalité "use strict" est disponible dans tous les navigateurs supérieurs à Internet Explorer 10.

Quels avantages ?

Cette fonctionnalité apporte trois avantages majeurs :

  • Transformer certaines erreurs silencieuses de Javascript en erreurs visibles et bloquantes pour améliorer la maintenabilité du code.
  • Permettre au moteur Javascript d'effectuer plus d'optimisations au moment de l'interprétation, il est donc possible que le code soit parfois plus rapide.
  • Empêcher l'utilisation de certains mots-clés qui seront utilisés dans les futures version de la norme ECMAScript.

L'introduction de ce mode d'interprétation a donc notamment permis de préparer le terrain pour l'arriver des nouvelles versions de la norme ECMAScript (en l'occurence ES6 pour l'instant) en préparant la future syntaxe ainsi qu'en empêchant certaines mauvaises habitudes de conception.

Quelles différences ?

Mais en réalité quel est l'impact de l'ajout de cette directive "use strict" dans vos fichiers Javascript ?

Il existe de nombreuses règles qui changeront la manière dont votre code va être interprété et exécuté, mais je vous en ai sélectionné les X plus importantes à connaitre :

1 - Plus de variables globales sans "var"

Vous le savez, en Javascript il est possible d'initialiser un variable sans qu'elle n'ait été déclaré au préalable, cette dernière sera alors une variable globale.

Le problème est que lors d'une faute de frappe, au lieu de réassigner une nouvelle valeur à une variable il vous est possible de créer une nouvelle variable globale par accident.

Si c'est le cas, le mode strict vous renverra une erreur de type "ReferenceError".

2 - De vraies erreurs lors de mauvaises assignations de variables

Si vous assignez une valeur à une variable qui est en "lecture-seule", Javascript ne fera simplement rien, sans vous afficher d'erreur, mais avec le mode strict, vous déclencherez un exception, exemple :


'use strict';
NaN = 5 // TypeError

3 - Erreur lors de la tentative de suppression de propriétés "protégées"

Comme l'exemple précédent, le code ci-dessous s**'exécutait sans déclencher d'erreur** hors mode strict :


'use strict';
delete Array.prototype // TypeError

4 - Unicité obligatoires des noms de paramètres

Aussi étrange que celà puisse paraitre, le code ci-dessous peut s'exécuter sans problème en mode "classique" :


'use strict';
function(data, data){
    return data;
}

Mais le résultat ne sera pas forcément celui attendu, sûrement dû à une faute de frappe, le mode strict oblige donc l'unicité des paramètres.

5 - Les entiers ne se transforment plus en base octale par inadvertence

S'il vous est déjà arrivé de précéder un nombre par un zéro inutile en Javascript, sachez qu'il y a de fortes chances (si le nombre ne contient que des chiffres inférieurs à 8) qu'il soit automatiquement transformé en octal (base 8).

Si dans votre console vous tapez simplement 047, vous verrez que cette dernière vous renverra le résultat 39, pour celà le mode strict empêche cette écriture et force l'utilisation du préfixe "0o" :


'use strict';
var n = 047; // SyntaxError
var o = 0o47; // Real octal

6 - De nouveaux mot-clés réservés

Pour préparer l'arrivée d'ES6, le mode strict a interdit l'utilisation de plusieurs mot-clés, lesquels sont : implements, interface, let, package, private, protected, public, static, and yield.

À noter que cette règle n'est pas prise en compte dans les navigateurs prenant nativement en charge l'ES6 !

Pour la liste exhaustive des modifications apportées par la directive "use strict", n'hésitez pas à consulter la documentation spécifique sur MDN Web docs !


Masaaki Komori sur Unsplash

Vous avez terminé l'article ?

Commentaires (0)

pour laisser un commentaire

Aucun commentaire pour l'instant