PC & Mobile

Pourquoi avons-nous besoin d'un mode strict en JavaScript? – Meilleure programmation

Pourquoi avons-nous besoin d'un mode strict en JavaScript? - Meilleure programmation


Les erreurs sont converties en erreurs. Ils étaient auparavant acceptés en mode non strict. Le mode strict restreint l'utilisation de la syntaxe d'erreur et ne laissera pas le code s'exécuter avec des erreurs en place.

Il est difficile de créer des variables globales en ne nous laissant pas déclarer des variables avec var, laisser, ou constdonc créer des variables sans les déclarer avec ces mots-clés ne fonctionnera pas. Par exemple, le code suivant jettera un ReferenceError:

'use strict';
badVariable = 1;

Nous ne pouvons pas exécuter le code ci-dessus en mode strict car ce code créera une variable globale badVariable si le mode strict est désactivé. Le mode strict empêche cela d'empêcher la création accidentelle de variables globales.

Tout code qui échoue de manière silencieuse lève maintenant une exception. Ceci inclut toute syntaxe non valide qui a été ignorée auparavant.

Par exemple, nous ne pouvons pas affecter de variables en lecture seule telles que arguments, NaN, ou eval avec le mode strict sur.

Toute affectation à des propriétés en lecture seule, telles que des propriétés globales non inscriptibles, une affectation de propriétés en lecture seule et une affectation d'éléments aux propriétés d'objets non extensibles lève une exception en mode strict.

Voici quelques exemples de syntaxe qui échoueront avec le mode strict activé:

'use strict';

laissez indéfini = 5;
laissez Infinity = 5;

laissez obj = {};
Object.defineProperty (obj, 'foo', {valeur: 1, accessible en écriture: false});
obj.foo = 1

laissez obj2 = {get foo () {return 17; }};
obj2.foo = 2

laissez fixedObj = {};
Object.preventExtensions (fixedObj);
fixed.bar = 1;

Tous les exemples ci-dessus jetteront un Erreur-type. indéfini et Infini sont des objets globaux non inscriptibles. obj est une propriété non-inscriptible.

obj2Des s foo property est une propriété de lecture uniquement et ne peut donc pas être définie. fixedObj a été empêché d'ajouter plus de propriétés à la Object.preventExtensions méthode.

En outre, la suppression de propriétés non supprimables jettera un Erreur-type quand il y a du code qui tente de le faire. Par exemple:

'use strict';
effacer Tableau.prototype

Cela jettera un Erreur-type.

Le mode strict interdit également les noms de propriétés en double dans un objet, de sorte que l'exemple suivant génère une erreur de syntaxe:

'use strict';
Soit o = {a: 1, a: 2};

Le mode strict requiert que les noms de paramètre de fonction soient uniques. Sans mode strict, si deux paramètres ont le nom un, alors celui défini plus tard sera accepté comme valeur du paramètre lorsque les arguments sont passés.

En mode strict, l'utilisation de plusieurs paramètres de fonction portant le même nom n'est plus autorisée. Par conséquent, l'exemple suivant ne pourra pas être exécuté avec une erreur de syntaxe:

multiplier const = (x, x, y) => x * x * y;

La syntaxe octale n'est également pas autorisée en mode strict. Cela ne fait pas partie de la spécification, mais il est supporté par les navigateurs en préfixant les nombres octaux avec un 0.

Cela confond les développeurs car certains peuvent penser que le 0 précédant le nombre n’a pas de sens. Par conséquent, le mode strict interdit cette syntaxe et génère une erreur de syntaxe.

Le mode strict empêche également l'utilisation de syntaxe rendant les optimisations difficiles. Elle doit savoir qu’une variable est réellement stockée à l’emplacement où elle pense l’être avant de procéder à l’optimisation. Nous devons donc empêcher le type de syntaxe qui empêche les optimisations de se produire.

Un exemple de ceci est le avec déclaration. Si nous l’utilisons, cela empêche l’interprète JavaScript de savoir à quelle variable ou propriété vous faites référence, car il est possible d’avoir une variable du même nom à l’intérieur ou à l’extérieur du répertoire. avec déclaration.

Si nous avons quelque chose comme le code suivant:

Soit x = 1;
avec (obj) {
X;
}

Ensuite, JavaScript ne saura pas si le X à l'intérieur de avec déclaration fait référence à la X variable ou la propriété de obj, obj.x.

Par conséquent, l'emplacement de la mémoire de X c'est ambigu. Donc, le mode strict empêche la avec déclaration d'être utilisé. Si nous avons un mode strict comme celui-ci:

'use strict';
Soit x = 1;
avec (obj) {
X;
}

Ensuite, le code ci-dessus aura une erreur de syntaxe.

Une autre chose que le mode strict empêche est la déclaration de variables à l'intérieur d'un eval déclaration.

Par exemple, sans mode strict, eval ('let x') déclarerait la variable X dans le code. Cela permet aux gens de masquer les déclarations de variable dans des chaînes susceptibles de remplacer la même déclaration de variable eval déclaration.

Pour éviter cela, le mode strict interdit les déclarations de variable dans l’argument de chaîne que nous passons dans une chaîne. eval déclaration.

Le mode strict interdit également la suppression des noms de variables en clair. Les erreurs suivantes génèrent une erreur de syntaxe:

'use strict';

laissez x;
supprimer x;

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer