J'inclus la déclaration:
"use strict";
au début de la plupart de mes fichiers Javascript.
JSLint n'a jamais averti à ce sujet auparavant. Mais maintenant, il dit:
Utilisez la forme de fonction "use strict".
Est-ce que quelqu'un sait ce que la "forme de fonction" serait?
Incluez 'use strict';
en tant que première instruction d'une fonction d'habillage, afin qu'elle ne concerne que cette fonction. Cela évite les problèmes lors de la concaténation de scripts non stricts.
Voir le dernier article de blog de Douglas Crockford Le mode strict arrive bientôt en ville .
Exemple tiré de ce post:
(function () {
'use strict';
// this function is strict...
}());
(function () {
// but this function is sloppy...
}());
Mise à jour: Si vous ne souhaitez pas insérer de fonction immédiate (par exemple, il s'agit d'un module de noeud), vous pouvez désactiver l'avertissement.
Pour JSLint (per Zhami ):
/*jslint node: true */
Pour JSHint :
/*jshint strict:false */
ou (par Laith Shadeed )
/* jshint -W097 */
Pour désactiver tout avertissement arbitraire de JSHint, vérifiez la carte dans code source JSHint (détails dans docs ).
Mise à jour 2: JSHint prend en charge l'option node:boolean
. Voir .jshintrc
sur github .
/* jshint node: true */
Si vous écrivez des modules pour NodeJS, ils sont déjà encapsulés. Indiquez à JSLint que vous avez un nœud en incluant en haut de votre fichier:
/*jslint node: true */
Je suggérerais d'utiliser jshint à la place.
Cela permet de supprimer cet avertissement via /*jshint globalstrict: true*/
.
Si vous écrivez une bibliothèque, je suggérerais d'utiliser global strict si votre code est encapsulé dans des modules, comme c'est le cas avec nodejs.
Sinon, vous forceriez tous les utilisateurs de votre bibliothèque à passer en mode strict.
J'ai commencé à créer une application Node.js/browserify après la publication du blog Cross Platform JavaScript . Et je me suis heurté à ce problème, parce que mon tout nouveau Gruntfile n'a pas passé jshint.
Heureusement, j'ai trouvé une réponse dans le livre de Leanpub sur Grunt :
Si nous l'essayons maintenant, nous analyserons notre Gruntfile… et nous obtiendrons des erreurs:
$ grunt jshint Running "jshint:all" (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of "use strict". 'use strict'; Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task "jshint:all" failed. Use --force to continue.
Les deux erreurs sont dues au fait que le fichier Grunt est un programme Node et que, par défaut, JSHint ne reconnaît ni n'autorise l'utilisation de
module
et de la version chaîne deuse strict
. Nous pouvons définir une règle JSHint qui acceptera nos programmes Node. Modifions la configuration de notre tâche jshint et ajoutons une clé d’options:jshint: { options: { node: true }, }
Ajouter node: true
au jshint options
, pour mettre jshint en "mode nœud", supprimait les deux erreurs pour moi.
Ajoutez un fichier .jslintrc (ou .jshintrc dans le cas de jshint) à la racine de votre projet avec le contenu suivant:
{
"node": true
}
Il n'y a rien de mal à la forme.
Plutôt que d’éviter la forme stricte "globale" pour ne pas craindre de concaténer du javascript non strict, il est probablement préférable de corriger le foutu javascript pour qu’il soit strict.
Je pense que tout le monde a raté la partie "soudainement" de cette question. Très probablement, votre .jshintrc a une erreur de syntaxe et n'inclut donc pas la ligne "navigateur". Exécutez-le via un validateur JSON pour voir où se trouve l'erreur.