Maison  >  Article  >  interface Web  >  Introduction détaillée au mode strict des compétences Javascript_javascript

Introduction détaillée au mode strict des compétences Javascript_javascript

WBOY
WBOYoriginal
2016-05-16 16:46:021438parcourir

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 »

Déclarer le "mode strict" est très simple avec une seule instruction :

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.

3. La position et le contexte de la déclaration du « mode strict » Le "mode strict" affecte principalement la portée dans laquelle il se trouve. S'il est utilisé dans une fonction, il ne fera pas en sorte que la portée globale et les autres fonctions inutilisées deviennent un "mode strict". Autrement dit, la portée d'une déclaration en mode strict dépend de son contexte. Si le mode strict est déclaré dans le contexte global (en dehors de la portée d'une fonction), tout le code du programme est en mode strict. Si vous déclarez le mode strict dans une fonction, tout le code de la fonction est en mode strict. Par exemple, dans l'exemple suivant, tout le code est en mode strict et une déclaration de variable en dehors d'une fonction entraîne une erreur de syntaxe : « La variable n'est pas définie en mode strict ». Le « mode strict » dispose de deux méthodes d'appel, adaptées à différentes situations.
1. Pour l'intégralité du fichier script

Mettez "use strict" sur la première ligne du fichier de script, et l'intégralité du script s'exécutera en "mode strict". Si cette ligne d'instruction n'est pas la première ligne, elle n'est pas valide et l'ensemble du script s'exécute en « mode normal ». Cela nécessite une attention particulière si des fichiers de code de différents modes sont fusionnés en un seul fichier.

(À 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 :


<script><p>"utiliser strict"; </p> <div class="codetitle">console.log("Ceci est le mode strict.");<span></script> <script></u>console.log("C'est le mode normal.");</a></script>

Le code ci-dessus indique qu'il y a deux morceaux de code Javascript dans une page Web. La première balise de script est en mode strict, mais la seconde ne l'est pas.


2. Pour une seule fonction


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" ;

return "Ceci est le mode strict.";}function notStrict() {return "Ceci est le mode normal.";>

3. Manière alternative d'écrire des fichiers de script

Étant donné que la première méthode d'appel n'est pas propice à la fusion de fichiers, une meilleure approche consiste à emprunter la deuxième méthode et l'intégralité Le fichier de script est placé dans une fonction anonyme qui est exécutée immédiatement.
Copier le code Le code est le suivant :

(fonction (){

"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 .

Copier le code Le code est le suivant :

"use strict";
v = 1; // Erreur signalée, v n'est pas déclaré
for(i = 0; i < 2; i ) { // Erreur signalée, i n'est pas déclaré
>

Par conséquent, en mode strict, les variables doivent d'abord le déclarer avec la commande var, puis l'utiliser.

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.

Copier le code Le code est le suivant :

"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.

Copier le code Le code est le suivant :

"use strict";
var x = 2 ;
console.info(eval("var x = 5; x")); // 5
console.info(x);
3. Mesures de sécurité renforcées

(1) Interdire à ce mot-clé de pointer vers l'objet global


function f(){
return !this;
}
// Renvoie false, car "this" pointe vers l'objet global, "!this" est faux
function f (){
"use strict";
return !this;
}

// Renvoie vrai, car en mode strict, la valeur de this est indéfini, donc "! this" est vrai.
Par conséquent, lors de l'utilisation du constructeur, si vous oubliez d'ajouter new, cela ne pointera plus vers l'objet global, mais une erreur sera signalée.


fonction f(){

"use strict";this.a = 1;

};
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

Copiez le code Le code est le suivant :

fonction f1(){

"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.

Copier le code Le code est le suivant :

"use strict";
var x;
supprimer x; // Erreur de syntaxe
var o = Object.create(null, 'x', {
valeur : 1,
configurable : true
});
delete o.x ; // Suppression réussie

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.

Copier le code Le code est le suivant :

"use strict";
var o = { };
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // Rapport d'erreurs

En mode strict, utilisez getter pour a Si l'attribut lu par la méthode se voit attribuer une valeur, une erreur sera signalée.
Copier le code Le code est le suivant :

"use strict";
var o = {
get v() { return 1; }
};
o.v = 2; // Rapport d'erreur

En mode strict, ajout de nouveaux attributs aux objets interdits l’expansion signalera une erreur.
Copier le code Le code est le suivant :

"use strict";
var o = { };
Object.preventExtensions(o);
o.v = 1; // Rapport d'erreurs

En mode strict, la suppression d'un attribut qui ne peut pas être supprimé signalera une erreur.
Copier le code Le code est le suivant :

"use strict";
supprimer Object.prototype ; // Signaler une erreur

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.

Copier le code Le code est le suivant :

"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 des arguments[i] pour les lire. En mode strict, il s'agit d'une erreur de syntaxe.

Copier le code Le code est le suivant :

"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.

Copier le code Le code est le suivant :

"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

Copier le code Le code est comme suit :

"use strict";
arguments ; // Erreur de syntaxe
var obj = { set p(arguments) { } }; { } catch ( arguments) { } // Erreur de syntaxe
function arguments() { } // Erreur de syntaxe
var f = new Function("arguments", "'use strict'; return 17;"); // Erreur de syntaxe

(2) les arguments ne suivent plus les changements de paramètres

Copier le code Le code est le suivant :
fonction f(a) {
a = 2;
return [a, arguments[0]];
}
f(1); le mode est [2,2]
fonction f(a) {
"use 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 dans une fonction anonyme.


Copier le code Le code est le suivant :
"use strict";
var f = function () { return arguments.callee; };
f(); // Signaler une erreur

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.


Copier le code Le code est le suivant :
"use strict";
if (true) {
fonction 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 ajoute 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.

Copier le code Le code est le suivant :
function package(protected) { // Syntaxe error
"use strict";
var Implements; // Erreur de syntaxe
}
De plus, la cinquième version d'ECMAscript elle-même stipule également d'autres mots réservés (class, enum, export, extends, import , super), ainsi que les mots réservés const ajoutés par les principaux navigateurs, ne peuvent pas être utilisés comme noms de variables.
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Une fonction javascript getStyle manuscrite compatible avec différents navigateurs (obtention du style d'un élément)_compétences javascriptArticle suivant:Une fonction javascript getStyle manuscrite compatible avec différents navigateurs (obtention du style d'un élément)_compétences javascript

Articles Liés

Voir plus