7937 votes

Quelle en est la raison?

Récemment, j'ai rencontré certains de mes code JavaScript à travers Crockford de JSLint, et il a donné le message d'erreur suivant:

Problème à la ligne 1 personnage 1: Manque d'instruction "use strict".

En faisant quelques recherches, j'ai réalisé que certaines personnes ajoutent "use strict"; dans leur code JavaScript. Une fois, j'ai ajouté de la déclaration, l'erreur a cessé de paraître. Malheureusement, Google n'a pas révélé beaucoup de l'histoire derrière cette chaîne de déclaration. Certes, il doit avoir quelque chose à voir avec la façon dont le JavaScript est interprété par le navigateur, mais je n'ai aucune idée de ce que serait l'effet.

Donc, qu'est - "use strict"; , de quoi s'agit-il, et est-il toujours pertinent?

Effectuez l'une des navigateurs actuels répondre à l' "use strict"; chaîne de caractères ou est l'usage pour l'avenir?

5180voto

Pascal MARTIN Points 195780

Cet article qui pourrait vous intéresser: John Resig - ECMAScript 5 en Mode Strict, JSON, et Plus

Pour citer quelques parties intéressantes:

Le Mode Strict est une nouvelle fonctionnalité dans ECMAScript 5, qui permet de mettre en place un programme ou une fonction, dans une "stricte" contexte d'exploitation. Ce cadre strict empêche que certaines mesures soient prises et jette plus d'exceptions.

Et:

Le mode Strict pour aider un couple de façons:

  • Il repère commun de codification des bloopers, de lever des exceptions.
  • Il empêche, ou lance des erreurs, s'il est relativement "dangereux" des mesures sont prises (comme l'obtention de l'accès à l'objet global).
  • Il désactive les fonctionnalités qui sont confus ou mal pensée.

Notez également que vous pouvez appliquer strict "mode" à l'ensemble du fichier... Ou vous pouvez l'utiliser seulement pour une fonction spécifique (toujours en citant John Resig de l'article):

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

Ce qui peut être utile si vous avez à mélanger l'ancien et le nouveau code ;-)

Donc, je suppose que c'est un peu comme l' "use strict" vous pouvez utiliser en Perl (d'où le nom?): il vous aide à faire moins d'erreurs, par la détection de plus en plus de choses qui pourraient conduire à des ruptures.

Actuellement, il est pris en charge par tous les principaux navigateurs.

1324voto

seth Points 18409

C'est une nouvelle fonctionnalité de ECMAScript5. John Resig a écrit un bon résumé .

C'est juste une chaîne de caractères que vous mettez dans vos fichiers js (soit en haut de votre fichier ou à l'intérieur d'une fonction) qui ressemble à ceci:

"use strict";

La mettre dans votre code maintenant ne devrait pas causer de problèmes avec les navigateurs actuels que c'est juste une chaîne de caractères. Il peut causer des problèmes avec votre code dans le futur si votre code viole le pragma. Par exemple, si vous avez actuellement foo = "bar" sans définir foo tout d'abord, votre code va commencer à défaut...ce qui est une bonne chose à mon avis.

440voto

Jamie Hutber Points 4666

Si les gens sont inquiets à l'aide de use strict il pourrait être utile de vérifier cet article:

http://www.novogeek.com/post/ECMAScript-5-Strict-mode-support-in-browsers-What-does-this-mean.aspx

Il parle de la prise en charge du navigateur, mais plus important encore, la façon de traiter avec elle en toute sécurité:

function isStrictMode(){
    return !this;
} 
//returns false, since 'this' refers to global object and '!this' becomes false

function isStrictMode(){   
    "use strict";
    return !this;
} 
//returns true, since in strict mode, the keyword 'this' does not refer to global object, unlike traditional JS. So here,'this' is null and '!this' becomes true.

230voto

DWoldrich Points 635

Un mot de prudence, tout ce que vous dure charge des programmeurs: l'application "use strict" à du code existant peut être dangereux! Cette chose n'est pas certains pour se sentir bien, heureux face autocollant que vous pouvez taper sur le code pour faire "mieux". Avec le "use strict" pragma, le navigateur de LANCER des exceptions dans des endroits aléatoires qu'il ne jetait jamais avant tout parce que, à l'endroit où vous faites quelque chose qui par défaut/en vrac JavaScript permet heureusement mais strictes JavaScript abhorre! Vous pouvez avoir de la rigueur des violations cacher rarement utilisées appels dans votre code qui ne fera que jeter une exception quand ils finissent par se faire rouler - dire, dans l'environnement de production que vos clients payants utiliser!

Si vous vous apprêtez à franchir le pas, c'est une bonne idée d'appliquer "use strict" aux côtés complète de tests unitaires et strictement configuré JSHint construire tâche qui vous donnera de la confiance qu'il n'y a pas de coin sombre de votre module qui va exploser horriblement juste parce que vous avez activé le Mode Strict. Ou, hey, voici une autre possibilité: il suffit de ne pas ajouter "use strict" à tout de votre héritage, code, il est probablement plus sûr de cette façon, honnêtement. CERTAINEMENT NE PAS ajouter "use strict" pour les modules que vous n'êtes pas propriétaire ou de maintenir, à l'instar de modules tiers.

Je pense que même si il est un redoutable animal en cage, "use strict" peut être quelque chose de bon, mais vous devez le faire correctement. Le meilleur moment pour aller strict, c'est quand votre projet est greenfield et vous commencez à partir de zéro. Configurer JSHint/JSLint avec tous les avertissements et les options de crinqué aussi serré que votre équipe peut l'estomac, obtenir un bon build/test/assert système du jour truqué comme Grunt+Karma+Chai, et ENSUITE seulement commencer le marquage de tous vos nouveaux modules comme "use strict". Être préparé pour guérir beaucoup de niggly les erreurs et les avertissements. Assurez-vous que tout le monde comprenne la gravité par la configuration de la construire à l'ÉCHEC si JSHint/JSLint produit toutes les violations.

Mon projet n'était pas un nouveau projet lorsque j'ai adopté "use strict". Comme un résultat, mon IDE est plein de taches rouges, parce que je n'ai pas de "use strict" sur la moitié de mes modules, et JSHint se plaint à ce sujet. C'est un rappel de ce que les refactorings que je dois faire à l'avenir. Mon objectif est d'être une marque rouge en raison libre à tous de mon manque de "use strict", mais qui est à des années maintenant.

146voto

Pank Points 2330

Je recommande fortement à tous les développeurs de commencer à utiliser le mode strict maintenant. Il y a assez de navigateurs le supportant que le mode strict sera légitimement aider à nous sauver d'erreurs, nous ne savions même pas où dans votre code. Apparemment, au stade initial, il y aura des erreurs, nous n'avons jamais rencontré avant. Pour obtenir une prestation complète, nous avons besoin de faire un bon test après le passage en mode strict pour s'assurer que nous avons pris tout. Certainement nous n'avons pas de simplement jeter "use strict" dans notre code et supposons qu'il y ait pas d'erreurs. Ainsi, le taux de désabonnement, c'est qu'il est temps de commencer à utiliser cette incroyablement utile pour le langage pour mieux écrire le code.

par exemple.

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint est un débogueur écrit par Douglas Crockford. Il suffit de coller dans votre script, et il va rapidement analyser les problèmes notables et des erreurs dans votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X