Le "mode strict" est une nouvelle syntaxe définie par ECMA-262 Edition 5, ce qui signifie qu'une syntaxe Javascript stricte doit être utilisée pour l'exécution. Certaines méthodes d'écriture couramment utilisées dans le passé généreront des exceptions SyntaxError, telles que :
. 1. Il n'y a pas de déclaration var avant la variable
2. Utilisez la syntaxe octale : var n = 023 et var s = "
1. Pourquoi utiliser le « mode strict »
Les principaux objectifs de l'établissement du « mode strict » sont les suivants :
1. Éliminez certains aspects déraisonnables et imprécis de la syntaxe Javascript et réduisez certains comportements étranges ;
2. Éliminez certains aspects dangereux de l'exécution du code et assurez la sécurité de l'exécution du code ;
3. vitesse d'exécution ;
4. Ouvrir la voie à de nouvelles versions de Javascript à l'avenir.
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 s'exécuter en « mode normal » ne s'exécuteront pas en « mode strict ». La maîtrise de ces contenus vous aidera à comprendre Javascript plus en détail et fera de vous un meilleur programmeur.
Cet article présentera le « mode strict » en détail.
2. Déclarez le « mode strict »
Copiez le code
Le code est le suivant :
"use strict";
Remarque : les anciennes versions des navigateurs la traiteront comme une ligne de chaînes ordinaires et l'ignoreront.
(À proprement parler, tant qu'il n'est pas précédé d'une instruction qui produit des résultats d'opération réels, "use strict" n'a pas besoin d'être sur la première ligne, par exemple directement après un point-virgule vide.)
Copier le code
Le code est le suivant :
Mettez "use strict" sur la première ligne du corps de la fonction, et la fonction entière s'exécutera en "mode strict".
Copier le code
Le code est le suivant :
function strict(){
" use strict" ;
"use strict";
// du code ici
})();
4. Changements de syntaxe et de comportement en "mode strict"
Le "Mode strict" a apporté quelques modifications à la syntaxe et au comportement de Javascript.
1. Déclaration explicite des variables globales
En mode normal, lorsque nous utilisons des variables, nous n'avons pas besoin de les déclarer avec var en premier (déclaration explicite), mais en mode strict, les variables doivent être déclarées avec var avant de pouvoir être utilisées, sinon une erreur s'est produite .
2. Liaison statique
Une caractéristique du langage Javascript est qu'il permet une "liaison dynamique", c'est-à-dire que l'objet auquel 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 la déclaration with
Parce que l'instruction with ne peut pas déterminer au moment de la compilation à quel objet appartient l'attribut.
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.
(1) Interdire à ce mot-clé de pointer vers l'objet global
};
f();// Erreur, ceci n'est pas défini
Dans un appel de fonction normal f(), la valeur de this pointera vers l'objet global. En mode strict, la valeur de this pointera vers undefined Lorsque la fonction est appelée via un appel et s'appliquera, si la valeur this est entrante. Le paramètre est un Pour les valeurs primitives (chaînes, nombres, valeurs booléennes) sauf nulles et indéfinies, la valeur de this deviendra l'objet d'empaquetage correspondant à cette valeur primitive. Si la valeur du paramètre thisvalue est indéfinie ou nulle, la valeur. de ceci pointera vers l'objet global. En mode strict, la valeur de this est la valeur du paramètre thisvalue sans aucune conversion de type.
(2) Il est interdit de parcourir la pile d'appels à l'intérieur de la fonction
"use strict";
f1.caller; // Rapport d'erreurs
f1.arguments; // Rapport d'erreurs
>
f1();
4. La suppression des variables est interdite
Les variables ne peuvent pas être supprimées en mode strict. Seules les propriétés d'objet dont configurable est défini sur true peuvent être supprimées.
5. Rapport d'erreur explicite
En mode normal, l'attribution d'une valeur à une propriété en lecture seule d'un objet ne signalera pas d'erreur, mais échouera silencieusement. En mode strict, une erreur sera signalée.
6. Erreur 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 possède plusieurs attributs portant le même nom, le dernier attribut attribué écrasera la valeur précédente. En mode strict, il s'agit d'une 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 des arguments[i] pour les lire. En mode strict, il s'agit d'une erreur de syntaxe.
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.
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
(2) les arguments ne suivent plus les changements de paramètres
9. Les fonctions doivent être déclarées au niveau supérieur
Les nouvelles versions de Javascript introduiront à l'avenir 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.L'utilisation de ces mots comme noms de variables entraînera une erreur.