web-dev-qa-db-fra.com

Message JSLint: Variables non utilisées

que puis-je faire si JSLint se plaint que "i" soit une variable inutilisée dans un tel scénario:

var items = "<option selected></option>";
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

(i, item) est l'ordre requis des paramètres et je n'utilise que "item". 

Existe-t-il une autre solution que de tolérer des variables inutilisées ou de réécrire le $ .each pour utiliser l'index, deux solutions que je préférerais ne pas utiliser?

Merci d'avance.

Mise à jour: j'apprécie toutes les suggestions mais ce code est simplement un exemple pour vous montrer ce que je veux dire et je suis intéressé par une solution générale, le cas échéant. Merci.

77
TheFitGeekGirl

Essayer:

var items = "<option selected></option>";
/*jslint unparam: true*/
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
/*jslint unparam: false*/  // so that you still get warnings from other functions
77
nickf

Je pense que cela doit être nouveau dans: http://www.jslint.com/help.html

"JSLint introduit un nouveau mot réservé: ignore"

Donc, ce qui précède devient simplement:

$.each(data, function (ignore, item) {

j'ignore ... trop facile. Le reste du code peut rester le même, les navigateurs sont contents et JSLint est content


Plus tôt (mauvaise) réponse:

Pour apaiser JsLint et les navigateurs que je devais utiliser:

function (d, i) {
        if (undefined !== win.undefined) {
            undefined(d);
        }
        return (i);
}

Le navigateur est tombé en panne sur "undefined (d)" car indéfini n’était pas une fonction. Ainsi, "undefined! == win.undefined" ignore la ligne si nous sommes dans un navigateur.

24
PuZZleDucK

Pourquoi ne pas utiliser void pour préciser que vous n'utilisez pas intentionnellement la variable?

$.each(data, function (i, item, any, other, unused, vars) {
  void(i, any, other, unused, vars);
  items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

Cela est également utile dans les fonctions abstraites censées être écrasées, mais pour lesquelles vous souhaitez afficher la signature, ou en réplique, pour lesquelles vous ignorez les arguments, mais souhaitez faire correspondre la signature de la fonction simulée.

1
xn.

vous pouvez faire ceci:

var items = "<option selected></option>";
$.each(data, function () {
    var item = arguments[1];
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

... mais c'est probablement pire si vous me demandez.

1
nickf

Je renomme "i" comme "non utilisé". Cela laisse évidemment toujours l'erreur, mais je la vois dans la liste et je sais que j'ai "vérifié" cette erreur et que cela me convient.

1
DharmaTurtle

Un moyen possible de se débarrasser de l'avertissement de manière assez auto-documentée est de faire en sorte que la variable non utilisée soit utilisée, comme ceci:

// Utility function in project scope:
function unusedVariables(/* Put all your deliberately unused variables here */) {
    // pass
}

// And then, later:
var items = "<option selected></option>";
$.each(data, function (i, item) {
    unusedVariables(i); //< This is the new and magical line
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

Bien sûr, vous pouvez maintenant entrer dans la situation où vous marquez une variable comme étant inutilisée et que vous l'utilisez toujours quelque part. En outre, cette méthode peut être trop détaillée, selon le contexte.

Cette méthode a l'avantage d'être précise. Utiliser /*jslint unparam*/ est peut-être trop large.

1
Magnus Hoff

Dans ce cas particulier de transformation d'un tableau/objet http://api.jquery.com/jquery.map/ (ou http://api.jquery.com/map/ ?) option.

var items = "<option selected></option>" + $.map(data, function (item) { 
    return "<option value='" + item.Value + "'>" + item.Text + "</option>";
}).get().join('');
0
Greg Domjan

Si la fonction a plus d'un paramètre non utilisé, vous pouvez utiliser "ignorer" comme ceci: 

function (ignoreFoo, ignoreBar, baz) {
}

Il doit simplement commencer par le mot réservé "ignore" (ignore, ignoreFoo, ignoreBar, ...).

0
Pilipe