J'ai regardé la référence JavaScript sur le Mozilla Developer Network, et je suis tombé sur quelque chose qui s'appelle "strict mode"
. Je l'ai relu et j'ai du mal à comprendre ce qu'il fait. Quelqu'un peut-il expliquer brièvement (en général) quel est son objectif et en quoi il est utile?
javascript
strict-mode
nkcmr
la source
la source
Réponses:
Son objectif principal est de faire plus de vérifications.
Ajoutez simplement
"use strict";
en haut de votre code, avant toute autre chose.Par exemple,
blah = 33;
est un JavaScript valide. Cela signifie que vous créez une variable complètement globaleblah
.Mais en mode strict, c'est une erreur car vous n'avez pas utilisé le mot-clé "var" pour déclarer la variable.
La plupart du temps, vous ne voulez pas créer de variables globales au milieu d'une portée arbitraire, donc la plupart du temps,
blah = 33
il s'agit d'une erreur et le programmeur ne voulait pas en fait que ce soit une variable globale, ils voulaient dire écrirevar blah = 33
.De même, il interdit de faire beaucoup de choses qui sont techniquement valables.
NaN = "lol"
ne produit pas d'erreur. Cela ne change pas non plus la valeur de NaN. en utilisant strict this (et des déclarations étranges similaires) produisent des erreurs. La plupart des gens apprécient cela car il n'y a aucune raison d'écrireNaN = "lol"
, donc il y avait très probablement une faute de frappe.En savoir plus sur la page MDN sur le mode strict
la source
Un aspect du mode strict non déjà mentionné dans la réponse de Simon est que le mode strict est défini
this
surundefined
des fonctions invoquées par appel de fonction.Alors des choses comme ça
provoquera une erreur lors de l'
privateMethod
appel (car vous ne pouvez pas ajouter de propriété àundefined
), plutôt que d'ajouter inutilement uneb
propriété à l'objet global.la source
privateMethod.bind(this)();
et d'appeler avecnew
jsbin.com
Le mode strict a été ajouté afin qu'il y ait un sous-ensemble facilement analysable statiquement d'EcmaScript qui serait une bonne cible pour les futures versions du langage. Le mode strict a également été conçu dans l'espoir que les développeurs qui se limitent au mode strict feraient moins d'erreurs et que les bogues qu'ils commettent se manifesteraient de manière plus évidente.
Harmony , qui, espérons-le, deviendra la prochaine version majeure d'EcmaScript, sera construite sur ES5 strict.
Certaines autres expériences linguistiques dépendent également du mode strict. SES dépend de l'analysabilité du mode strict ES5.
L'annexe C de la norme explique les différences entre le mode strict et le mode normal.
la source
Appel du mode strict dans le code
Le mode strict s'applique à des scripts entiers ou à une fonction individuelle. Cela ne s'applique pas aux instructions de bloc entre accolades {}, tenter de l'appliquer à de tels contextes ne fait rien.
Script entier:
Supposons que nous créons app.js, donc l'ajout du premier script d'utilisation d'instruction appliquera le mode strict pour tout le code.
Mode strict pour la fonction:
Pour appeler le mode strict pour une fonction, mettez l'instruction exacte «use strict»; au début du corps de la fonction avant toute autre instruction.
Le mode strict intègre plusieurs changements à la sémantique Javascript normale. Le premier mode strict élimine certaines erreurs silencieuses JavaScript en les changeant pour générer des erreurs.
Par exemple: code utilisant le mode strict
Dans l'exemple de code ci-dessus sans utiliser le mode strict dans le code, cela ne générera pas d'erreur. Comme nous accédons à la variable
x
sans la déclarer. Donc, en mode strict, l'accès à une variable non déclarée génère une erreur.Essayons maintenant d'accéder à la variable x sans la déclarer sans mode strict.
Avantage d'utiliser le mode strict:
la source
Le mode strict apporte plusieurs modifications à la sémantique JavaScript normale.
Le mode strict élimine certaines erreurs JavaScript silencieuses en les changeant en erreurs.
Le mode strict corrige les erreurs qui empêchent les moteurs JavaScript d'effectuer des optimisations.
Le mode strict interdit certaines syntaxes susceptibles d'être définies dans les futures versions d'ECMAScript.
la source
ECMAScript5
introduit de nouveaux objets et propriétés ainsi que le soi-disant"strict mode"
.Le mode strict est un sous-ensemble du langage qui exclut les fonctionnalités obsolètes. Le mode strict est opt-in et n'est pas obligatoire, ce qui signifie que si vous voulez que votre code s'exécute en mode strict, vous déclarez votre intention en utilisant (une fois par fonction, ou une fois pour l'ensemble du programme) la chaîne suivante:
la source
2017 et j'ai enfin trouvé la documentation:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
la source
Question:
Voici le problème que j'ai rencontré, je suivais un tutoriel et il a fini par essayer de compiler le
scss
fichier suivant et d'essayer de générer du code CSS à partir de celui-ci,en utilisant la
gulpfile.js
tâche suivante :Donc, l'erreur que j'obtiens est la suivante:
Solution:
il me montre donc le
index.js
fichier qui se trouve dans mon module gulp-sass (qui est fondamentalement verrouillé et ne doit pas être modifié). Mais si je vais avec force et ajoute"use_strict"
le dessusindex.js
fichier, il exécute ma tâche en douceur.J'étais impuissant, alors je continue à utiliser ceci comme solution! Mais après avoir parcouru d'autres questions et réponses SO , j'ai vu la réponse suivante:
et plus tôt, j'ai mis à jour mes NodeJs (vers Version10.x), puis j'ai reconstruit Gulp en exécutant les commandes suivantes comme Terminal me l'a indiqué:
Et tout va bien. C'est ainsi que cela a été résolu. J'ai annulé les changements que j'ai faits pour
index.js
fichier du module gulp. Et maintenant, il fonctionne bien.J'espère que cette réponse sera utile à quelqu'un là-bas!
la source