Le mode strict est une nouvelle fonctionnalité d'ECMAScript 5, qui permet de placer l'ensemble du programme, ou une certaine fonction, dans un contexte de fonctionnement "strict". Ce contexte strict empêchera certaines opérations et générera davantage d'exceptions.
Bien qu'ECMAScript 5 soit rétrocompatible avec ECMAScript 3, en mode strict, toutes les fonctionnalités obsolètes dans ECMAScript 3 sont désactivées (ou génèrent des erreurs) au lieu d'être compatibles.
L'activation du mode strict présente les avantages suivants :
1. Détectez quelques erreurs de programmation et lancez des exceptions.
2. Empêchez certaines opérations relativement « dangereuses » (telles que l'accès aux variables globales) et lancez des exceptions.
3. Désactivez certaines fonctionnalités déroutantes.
La plupart des informations sur le mode strict se trouvent à la page 223 de la spécification ES5 [PDF].
(Remarque : le mode strict d'ECMAScript 5 est différent du mode strict de Firefox)
Comment activer le mode strict
Ajoutez cette instruction au début du programme pour activer le mode strict pour l'ensemble du script :
Une application pratique de l'activation du mode strict dans une fonction consiste à définir l'intégralité de la bibliothèque de classes Javascript dans une fonction en mode strict, afin qu'elle n'affecte pas le code externe :
(fonction(){
"utiliser strict";
// Définissez strictement votre bibliothèque...
})();
// Code non strict...
Variables et propriétés
L'affectation à une variable non définie échouera au lieu de faire de la variable une variable globale.
Écrire une propriété avec une propriété inscriptible de false, supprimer une propriété avec une propriété configurable de false ou ajouter une propriété extensible avec une propriété false entraînera une erreur (ces propriétés sont pré-convenues). Dans le passé, ces opérations ne produisaient pas d’exception et échouaient simplement en silence.
Effectuer une opération de suppression sur une variable, une fonction ou un paramètre de fonction provoquera une erreur.
supprimer foo ; // Erreur
supprimer le test ; // Erreur
fonction test2(arg) {
supprimer l'argument ; // Erreur
>
évaluation
Toute utilisation du nom "eval" (l'intention principale est de pointer la fonction eval vers une variable ou une propriété d'objet) est interdite.
Fonction
Le remplacement de l'objet arguments entraîne une erreur :
with() { } est complètement interrompue en mode strict.