Maison  >  Article  >  interface Web  >  Introduction à ECMAScript 5 Mode strict_Connaissances de base

Introduction à ECMAScript 5 Mode strict_Connaissances de base

WBOY
WBOYoriginal
2016-05-16 16:11:421272parcourir

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 :

Copier le code Le code est le suivant :

'utiliser strict';

Vous pouvez également activer le mode strict uniquement à l'intérieur de la fonction, afin que cela n'affecte pas l'extérieur :
Copier le code Le code est le suivant :

fonction imStrict() {
'utiliser strict';
​//...votre code...
>

L'instruction qui active le mode strict est simplement une simple chaîne "use strict" sans aucune nouvelle syntaxe. Cela signifie qu’il n’y aura aucun impact négatif sur les anciens navigateurs.

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 :

Copier le code Le code est le suivant :

// Code non strict...

(fonction(){
"utiliser strict";

// Définissez strictement votre bibliothèque...
})();

// Code non strict...


Alors, quels changements pour les scripts en mode 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.

Copier le code Le code est le suivant :

var foo = 'test';
fonction test() { }

supprimer foo ; // Erreur
supprimer le test ; // Erreur

fonction test2(arg) {
supprimer l'argument ; // Erreur
>


Définir les mêmes propriétés à l'intérieur d'un conteneur d'objets entraînera la levée d'une exception :
Copier le code Le code est le suivant :

//Erreur
{ foo : vrai, foo : faux }

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

Copier le code Le code est le suivant :

// Tous génèrent des erreurs...
obj.eval = ...
obj.foo = eval;
var éval = ...;
pour ( var eval in ... ) {}
fonction eval(){}
test de fonction (évaluation){}
fonction(évaluation){}
nouvelle fonction("eval")

De plus, déclarer de nouvelles variables via eval n'aura également aucun effet :
Copier le code Le code est le suivant :

eval("var a = false;");
print( typeof a ); // non défini

Fonction

Le remplacement de l'objet arguments entraîne une erreur :

Copier le code Le code est le suivant :

arguments = [...]; // non autorisé

Les paramètres portant le même nom provoqueront une erreur :
Copier le code Le code est le suivant :

(function(foo, foo) { }) // Erreur

L'accès à arguments.caller et arguments.callee lèvera une exception. Par conséquent, toute fonction anonyme qui doit être utilisée doit être nommée en premier, par exemple :
Copier le code Le code est le suivant :

setTimeout(fonction plus tard(){
// faire des trucs...
​setTimeout(plus tard, 1000);
}, 1000 );

Les propriétés des arguments, de l'appelant et de l'appelé de la fonction n'existent plus et les opérations qui les définissaient sont interdites.
Copier le code Le code est le suivant :

fonction test() { }
test.caller = 'appelant'; // Erreur

Enfin, un BUG de longue date (et très ennuyeux) a été résolu : lors de l'utilisation de null ou d'undefined comme premier paramètre de la méthode Function.prototype.call ou Function.prototype.apply, celui-ci à l'intérieur de la fonction pointera vers l'objet global. . Le mode strict empêchera son exécution et lèvera une exception :
Copier le code Le code est le suivant :

(function(){ ... }).call(null); // Exception

avec() { } L'instruction

with() { } est complètement interrompue en mode strict.

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