close

JavaScript : Le mode strict

#1 Qu'est ce que le mode strict ? open

Lorsque vous écrivez du code JavaScript puis que vous l'exécutez dans votre navigateur celui-ci s'exécute en "mode normal". Dans ce "mode normal" un certain nombre de choses sont jugées acceptables par le moteur JavaScript. Par exemple vous pouvez utiliser une variable sans la déclarer à l'aide d'un mot réservé var let ou const. Cette tolérance peut vous gêner. Vous préféreriez que le moteur JavaScript vous prévienne de ce que vous considérez comme étant une erreur. Et bien c'est possible en demandant que votre script s'exécute en "mode strict".

Pour faire cela vous avez deux solutions :

  1. Vous écrivez "use strict" dès la première ligne de votre script. Dans ce cas le mode strict sera appliqué dans tout votre script.
  2. Vous écrivez "use strict" dès la première ligne d'une fonction . Dans ce cas le mode strict sera appliqué dans toute la fonction.

Le "mode strict" existe depuis la version 5 de JavaScript.

Il faut savoir que le "mode strict" est appliqué par défaut dans les modules ES6. Il s'agit des modules qui sont construits avec les mots réservés import et export. Ce n'est pas le cas des modules de l'environnement nodejs.

Dans l'exemple ci-dessous, j'utilise la variable x sans l'avoir déclarée. En "mode strict" le moteur JavaScript va me prévenir en déclenchant une erreur.

Il en sera ainsi dans un certain nombre de situations. Nous allons voir les plus courantes dans la suite du tuto.

Tester le code
en mode strict
Tester le code
sans mode strict
Exemple mode strict

#2 Principales différences entre le "mode normal" et le "mode strict" open

J'ai sélectionné 5 cas de figures dans lesquels il y a des différences d'exécution entre ces deux modes. On va faire un exemple pour chacune de ces situations. Ce ne sont pas les seules. J'ai sélectionné ce qui me semble être le plus courant.

  1. Il y a d'abord l'exemple que l'on vient de voir où le mode strict déclenche une erreur si on utilise une variable qui n'a pas été déclarée.
  2. Maintenant on va voir une situation où ce n'est pas une erreur qui est déclenchée mais c'est l'exécution d'une partie du code qui va s'exécuter de manière différente. Ci-dessous j'utilise this. Je le fais dans le scope global. En mode normal this vaudrait window (* environnement navigateur). Si j'exécute ce morceau de code en demandant le mode strict la valeur de this vaut undefined. Tester le code
    en mode strict
    Tester le code
    sans mode strict
  3. Supprimer une propriété qui est en lecture seule déclenche une erreur en mode strict. Si vous ne connaissez pas la méthode defineProperty je vous invite à faire ce tuto. Ci-dessous je place le "use strict" dans la fonction deleteProp. Ensuite je crée un objet puis j'ajoute une propriété qui est en lecture seule puis j'essaie de la supprimer ce qui déclenche une erreur lorsque deleteProp est invoquée. Tester le code
    en mode strict
    Tester le code
    sans mode strict
    Suppression d'une propriété en lecture seule en mode strict
  4. Déclarer deux arguments de même nom déclenche une erreur en mode strict. Ci-dessous je déclare une fonction dans laquelle par erreur je mets deux paramètres qui ont le même nom. Je constate le déclenchement d'une erreur seulement en mode strict. Tester le code
    en mode strict
    Tester le code
    sans mode strict
    Argument identique en mode strict
  5. L'effet alias dans le comportement de arguments est supprimé en mode strict. En ce qui concerne l'exemple ci-dessous, je rappelle que arguments[0] et l'argument a de la fonction test sont des alias dans le mode normal. Ici je suis en mode strict. J'affecte arguments[0] à la valeur 10 puis j'affiche la valeur de arguments[0] et la valeur de a. Je constate que les deux valeurs sont différentes ce qui prouve que l'effet d'alias est supprimé. Tester le code
    en mode strict
    Tester le code
    sans mode strict