Mode strict JavaScript (utilisez strict)

Présentation

En plus du mode d'exécution normal, ECMAscript 5 ajoute un deuxième mode d'exécution : le "mode strict". Comme son nom l'indique, ce mode permet à Javascript de s'exécuter dans des conditions plus strictes.

Pourquoi utiliser le mode strict

- Élimine certains aspects déraisonnables et lâches de la syntaxe Javascript et réduit certains comportements étranges ;

- Éliminer certaines insécurités dans l'exécution du code et assurer la sécurité de l'exécution du code ;

- Améliorer l'efficacité du compilateur et augmenter la vitesse d'exécution

- Conçu pour les futures nouvelles versions de Javascript Bonne préfiguration ;

Le « mode strict » reflète l'orientation de développement plus raisonnable, plus sûre et plus rigoureuse de Javascript. Les navigateurs grand public, y compris IE 10, le prennent déjà en charge, et de nombreux grands projets ont commencé à l'adopter pleinement.

D'un autre côté, le même code peut avoir des résultats d'exécution différents en "mode strict" ; certaines instructions qui peuvent être exécutées en "mode normal" ne pourront pas être exécutées en "mode strict". La maîtrise de ces contenus vous aidera à comprendre Javascript plus en détail et fera de vous un meilleur programmeur.

Entrez le drapeau

"use strict";

Comment appeler

1. Pour un seul script

<script>
 "utilisez strict";
console. log("C'est le mode strict.");
</script>

2. function

function strict(){

 "use strict";

Return "C'est le mode strict."

}

function notStrict() {

  return "C'est le mode normal.";

 }

3 façons alternatives d'écrire des fichiers de script

(function (){

"use strict";

// du code ici

})();

Exemple 1 :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
"use strict";
x = 3.14;       // 报错 (x 未定义)
</script>
</body>
</html>

Exemple 2 :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p>浏览器按下 F12 开启调试模式,查看报错信息。</p>
<script>
x = 3.14;       // 不报错 
myFunction();
function myFunction() {
   "use strict";
    y = 3.14;   // 报错 (y 未定义)
}
</script>
</body>
</html>


Changements de syntaxe et de comportement :

1 Déclaration explicite des variables globales

En mode normal, si une variable reçoit une valeur sans être déclarée, elle est par défaut une variable globale. Le mode strict interdit cette utilisation et les variables globales doivent être déclarées explicitement.

"use strict";

v = 1; // Erreur, v n'est pas déclaré

for (i = 0; i < 2; i++) { // Erreur, i n'est pas déclaré

}

Donc, en mode strict, les variables sont Il doit être déclaré avec la commande var avant utilisation.


2 Liaison statique

Une caractéristique du langage Javascript est qu'il permet la "liaison dynamique", c'est-à-dire à quel objet appartiennent certaines propriétés et méthodes , n'est pas déterminé au moment de la compilation, mais au moment de l'exécution.

Le mode strict impose certaines restrictions sur la liaison dynamique. Dans certains cas, seule la liaison statique est autorisée. En d’autres termes, l’objet auquel appartiennent les propriétés et les méthodes est déterminé lors de la phase de compilation. Cela contribuera à améliorer l’efficacité de la compilation, à rendre le code plus facile à lire et à provoquer moins de surprises.

Plus précisément, cela implique les aspects suivants.

(1) Il est interdit d'utiliser l'instruction with

car l'instruction with ne peut pas déterminer au moment de la compilation à quel objet appartient l'attribut.

"use strict";

var v = 1;

avec (o){ // Erreur de syntaxe

 v = 2;

}

(2) Créer une portée d'évaluation

En mode normal, le langage Javascript a deux portées variables : la portée globale et la portée de la fonction. Le mode strict crée une troisième portée : la portée d'évaluation.

En mode normal, la portée de l'instruction eval dépend du fait qu'elle se trouve dans la portée globale ou dans la portée de la fonction. En mode strict, l'instruction eval elle-même est une portée et ne peut plus générer de variables globales. Les variables qu'elle génère ne peuvent être utilisées que dans eval.

"use strict";

var x = 2;

console.info(eval(" var x = 5;

3 Mesures de sécurité renforcées (1) Interdire à ce mot-clé de pointer vers l'objet global

fonction f(){

Return !this;

}

// Return false car "this" pointe à l'objet global, "! this" est faux

function f(){

 "use strict";

return !this;

}

// Renvoie true, car en mode strict, la valeur de this n'est pas défini, donc "! this" est vrai.

(2) Il est interdit de parcourir la pile d'appels à l'intérieur de la fonction

fonction f1(){

 " use strict";

f1.caller; // Rapport d'erreur

f1.arguments; // Rapport d'erreur

>

f1();

4 La suppression des variables est interdite

Ne peut pas être supprimé en mode strict variable. Seuls les attributs d'objet dont la valeur configurable est true peuvent être supprimés.

"use strict";


var x;

supprimer x; // Erreur de syntaxe

var o = Object.create(null, {'x' : {

 valeur : 1,

configurable : vrai

}});

supprimer o.x ; // Supprimer avec succès


5 Rapport d'erreur explicite

En mode normal, lors de l'attribution d'une valeur à une propriété en lecture seule d'un objet, aucune erreur ne sera signalé, échouent seulement silencieusement. En mode strict, une erreur sera signalée.

"use strict";

var o = {};

Object.defineProperty(o, "v", { valeur : 1, inscriptible : false });

o.v = 2; // Rapport d'erreur

En mode strict, utilisez If l'attribut lu par la méthode getter se voit attribuer une valeur, une erreur sera signalée.

"use strict";

var o = {

get v () { return 1; }

};

o.v = 2; // Rapport d'erreur

Strict Dans ce mode, l'ajout de nouveaux attributs à un objet dont l'expansion est interdite entraînera une erreur.

"use strict";

var o = {};

Object.preventExtensions(o) ;

o.v = 1; // Rapport d'erreur

En mode strict, si vous supprimez un attribut qui ne peut pas être supprimé, une erreur sera signalée.

"use strict";

delete Object.prototype; // Rapport d'erreur


6 Erreurs de nom en double

Le mode strict a ajouté de nouvelles erreurs de syntaxe.

(1) Les objets ne peuvent pas avoir d'attributs avec des noms en double

En mode normal, si un objet a plusieurs attributs avec des noms en double, le dernier attribut attribué écrasera la valeur précédente. En mode strict, il s'agit d'une erreur de syntaxe.

"use strict";

var o = {

 p : 1,

 p : 2

} ; // Erreur de syntaxe

(2) Les fonctions ne peuvent pas avoir de paramètres avec des noms en double

En mode normal, si la fonction a plusieurs paramètres portant le même nom, vous pouvez utiliser les arguments[i] pour les lire. En mode strict, il s'agit d'une erreur de syntaxe.

"use strict";

fonction f(a, a, b) { // Erreur de syntaxe

  return ;

}


7 La notation octale est interdite

En mode normal, si le premier chiffre d'un entier est 0, cela signifie qu'il s'agit d'un nombre octal. Par exemple, 0100 est égal à 64 en décimal. Le mode strict interdit cette représentation, le premier bit de l'entier est 0, et une erreur sera signalée.

"use strict";

var n = 0100; // Erreur de syntaxe


8 Limitations de l'objet arguments

arguments est l'objet paramètre de la fonction, et le mode strict restreint son utilisation.

(1) L'affectation aux arguments n'est pas autorisée

"use strict";

arguments++; // Erreur de syntaxe

var obj = { set p(arguments) { } }; // Erreur de syntaxe

try { } catch (arguments) { } // Syntaxe erreur

function arguments() { } // Erreur de syntaxe

var f = new Function("arguments", "'use strict' ; return 17;"); // Erreur de syntaxe

(2) les arguments ne suivent plus les modifications des paramètres

fonction f(a) {

 a = 2;

 return [a, arguments[0]];

}

f(1); // Le mode normal est [2,2]

fonction f(a) {

"utiliser strict";

 a = 2;

 return [a, arguments[0]];

}

f(1); // Le mode strict est [2); ,1]

(3) Il est interdit d'utiliser arguments.callee

Cela signifie que vous ne pouvez pas vous appeler à l'intérieur d'une fonction anonyme.

"use strict";

var f = function() { return arguments.callee;

f(); // Rapport d'erreur


9 La fonction doit être déclarée au niveau supérieur

Les nouvelles versions de Javascript à l'avenir introduiront une « portée au niveau du bloc ». Afin de rester conforme à la nouvelle version, le mode strict permet uniquement de déclarer les fonctions dans la portée globale ou le niveau supérieur de la portée de la fonction. Autrement dit, il n'est pas autorisé de déclarer des fonctions dans un bloc de code non fonctionnel.

"use strict";

if (true) {

 function f() { } / / Erreur de syntaxe

}

pour (var i = 0; i < 5; i++) {

 fonction f2() { } // Erreur de syntaxe

}


10 Mots réservés

Afin de passer aux nouvelles versions de Javascript à l'avenir, le mode strict a ajouté de nouveaux mots réservés : implémente, interface, let, package, privé, protégé, public, statique, rendement .

L'utilisation de ces mots comme noms de variables entraînera une erreur.

function package(protected) { // Erreur de syntaxe

 "use strict";

 var implémente ; // Erreur de syntaxe

}


Formation continue
||
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var public = 500; // 报错 </script> </body> </html>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel