Frage JSLint-Nachricht: Nicht verwendete Variablen


Was kann ich tun, wenn sich JSLint darüber beschwert, dass "i" in einem solchen Szenario eine ungenutzte Variable ist:

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

(i, item) ist die erforderliche Reihenfolge der Parameter und ich verwende nur "item".

Gibt es eine andere Lösung, als unbenutzte Variablen zu tolerieren oder die $ .each-Datei neu zu schreiben, um den Index zu verwenden, beides Lösungen, die ich lieber nicht machen würde?

Danke im Voraus.

Update: Ich schätze alle Vorschläge, aber dieser Code ist nur ein Beispiel, um Ihnen zu zeigen, was ich meine, und ich bin daran interessiert, eine allgemeine Lösung zu sehen, wenn es welche gibt. Vielen Dank.


76
2017-07-05 13:43


Ursprung


Antworten:


Versuchen:

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

76
2017-07-05 15:16



Ich denke, das muss neu sein in: http://www.jslint.com/help.html

"JSLint führt ein neues reserviertes Wort ein: ignore"

So wird das obige einfach:

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

i => ignoriere ... zu einfach. Der Rest des Codes kann gleich bleiben, Browser sind glücklich und JSLint ist glücklich


Frühere (falsche) Antwort:

Um sowohl JsLint als auch Browser zu beschwichtigen, musste ich folgendes verwenden:

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

Der Browser stürzte bei "undefined (d)" ab, weil undefined keine Funktion war. So überspringt das "undefiniert! == win.undefined" die Zeile, wenn wir uns in einem Browser befinden.


23
2017-07-08 14:38



Du könntest das tun:

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

... aber das ist wahrscheinlich schlimmer, wenn du mich fragst.


1
2017-07-05 13:48



Eine Möglichkeit, die Warnung auf eine Art und Weise zu löschen, die ziemlich selbstdokumentierend ist, besteht darin, die unbenutzte Variable wie folgt zu verwenden:

// 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>";
});

Natürlich können Sie jetzt in die Situation kommen, in der Sie eine Variable als unbenutzt markieren und sie immer noch irgendwo verwenden. Außerdem ist diese Methode je nach Kontext möglicherweise zu ausführlich.

Diese Methode hat den Vorteil, dass sie genau ist. Verwenden /*jslint unparam*/ könnte zu breit sein.


1
2017-07-05 15:55



Wie wäre es mit der Verwendung? void explizit machen, dass Sie die Variable absichtlich nicht verwenden?

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

Dies ist auch nützlich in abstrakten Funktionen, die voraussichtlich überschrieben werden, aber in denen Sie die Signatur anzeigen möchten, oder in Mocks, bei denen Sie Argumente ignorieren, aber die Signatur der mocked-Funktion anpassen möchten.


1
2017-09-13 23:59



Ich benenne "i" als "unbenutzt". Es bleibt natürlich der Fehler, aber ich sehe es in der Liste und weiß, dass ich diesen Fehler "überprüft" habe und damit einverstanden bin.


1
2017-11-14 06:38



In diesem speziellen Fall der Transformation eines Arrays / Objekts http://api.jquery.com/jquery.map/ (oder http://api.jquery.com/map/ ?) ist eine Option.

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

0
2018-01-30 07:10



Wenn die Funktion mehr als einen nicht verwendeten Parameter hat, können Sie verwenden "ignorieren" so was :

function (ignoreFoo, ignoreBar, baz) {
}

Es muss einfach mit dem reservierten Wort "ignore" beginnen (ignore, ignoreFoo, ignoreBar, ...).


0
2018-04-25 21:08