- Le mode strict élimine quelques erreurs silencieuses de JavaScript en les changeant en erreurs explicites (une exception sera levée).
- Le mode strict corrige les erreurs qui font qu'autrement il est difficile pour les moteurs JavaScript d'effectuer des optimisations. Le code sera donc exécuté plus rapidement en mode strict, sans changer une seule ligne si cela n'est pas nécessaire.
- Le mode strict interdit les mot-clés susceptibles d'être définis dans les futures versions de ECMAScript.
Variable non déclarée
"use strict"; x = 3.14; // cause une erreur car x n'est pas déclaréObjet non déclaré
"use strict"; x = {p1:10, p2:20}; // cause une erreur: objet non déclaréRedéclaration
En mode strict, on peut redéclarer une variable. Cependant redéclarer un let dans un bloc produira une erreur de syntaxe.
<script> 'use strict'; var a = 'foo'; var a = 'bar'; // No problem, a est remplacé. 'use strict'; let a = 'foo'; let a = 'bar'; // SyntaxError: Identifier 'a' has already been declared </script>Supprimer une fonction
"use strict"; function x(p1, p2) {}; delete x; // cause une erreurDupliquer un paramètre
"use strict"; function x(p1, p2) {}; delete x; // cause une erreurLittéral numérique octal interdit:
"use strict"; var x = 010; // Saint Tax ErrorCaractères spéciaux octal interdits:
"use strict"; var x = "\010"; // Saint Tax ErrorEcrire une propriété en lecture seule interdit:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // cause une erreurEcrire une propriété get-only:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // cause une erreurSupprimer une propriété non supprimable interdit:
"use strict"; delete Object.prototype; // cause une erreureval ne peut pas être employé comme nom de variable:
"use strict"; var eval = 3.14; // cause une erreureval() ne crée pas de variable dans sa portée:
"use strict"; eval ("var x = 2"); alert (x); // cause une erreurLe statement with est interdit:
"use strict"; with (Math){x = cos(2)}; // cause une erreurDans un appel de fonction, le mot clé this fait référence à l'objet global. En mode strict, this vaut undefined. "Cela signifie entre autres qu'il est impossible de faire référence à l'objet window du navigateur grâce à this au sein d'une fonction en mode strict." :
"use strict"; function fun() { return this; } console.log(fun() === undefined); // true console.log(fun.call(2) === 2); // true console.log(fun.apply(null) === null); // true console.log(fun.call(undefined) === undefined); // true console.log(fun.bind(true)() === true); // trueMots réservés de la syntaxe, interdits comme nom de variable:
implements interface let package private protected public static yield
"use strict"; var public = 1500; // cause une erreur
Le mode strict s'applique à des scripts entiers ou à des fonctions individuelles:
x = 3.14; // ne cause pas d'erreur maFonction(); function maFonction() { "use strict"; y = 3.14; // cause une erreur }
function strict() { // Syntaxe en mode strict au niveau de la fonction 'use strict'; function nested() { return "Ho que oui, je le suis !"; } return "Allô ! Je suis une fonction en mode strict ! " + nested(); } function notStrict() { return "Je ne suis pas strict."; }
Références
www.w3schools.comhttps://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Strict_mode
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Strict_mode/Passer_au_mode_strict