Was kann ich tun, wenn sich JSLint darüber beschwert, dass "i" in einem solchen Szenario eine nicht verwendete 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 nicht verwendete Variablen zu tolerieren oder $ .each neu zu schreiben, um den Index zu verwenden, beides Lösungen, die ich lieber nicht tun würde?
Danke im Voraus.
Update: Ich freue mich über 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 finden, falls es welche gibt. Vielen Dank.
javascript
jquery
jslint
TheFitGeekGirl
quelle
quelle
this
=item
( api.jquery.com/jQuery.each ), sodass Sie keinen der beiden Parameter verwenden müssen. Aber diese Frage sollte wahrscheinlich allgemeiner beantwortet werden.$.each(data, function (, item)
_
einen nicht verwendeten Parameter , aber ich sehe keine Möglichkeit, JSLint anzuweisen , ihn spezifisch zu ignorieren_
, obwohl das wirklich nett wäre.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
quelle
$.each([{a:0},{a:1},{a:2},{a:3}], function(){ console.log(this.a)})
unparam
wird von JSLint nicht mehr unterstützt. Stattdessen wird das neueignore
Schlüsselwort bereitgestellt, das in der folgenden Antwort beschrieben wird.Ich denke, das muss neu sein in: http://www.jslint.com/help.html
"JSLint führt ein neues reserviertes Wort ein: Ignorieren"
So wird das Obige einfach:
$.each(data, function (ignore, item) {
i => ignorieren ... zu einfach. Der Rest des Codes kann gleich bleiben, die Browser sind zufrieden und JSLint ist zufrieden
Frühere (falsche) Antwort:
Um sowohl JsLint als auch Browser zu beruhigen, musste ich Folgendes verwenden:
Der Browser stürzte bei "undefined (d)" ab, da undefined keine Funktion ist. Das "undefined! == win.undefined" überspringt also die Zeile, wenn wir uns in einem Browser befinden.
quelle
ignore
Art der Unterdrückung von Warnungen bricht zusammen, wenn dieselbe Funktion mehr als einen nicht verwendeten Parameter hat.Sie könnten dies 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.
quelle
Eine Möglichkeit, die Warnung auf eine Weise zu entfernen, die ziemlich selbstdokumentierend ist, besteht darin, die nicht verwendete 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 geraten, in der Sie eine Variable als nicht verwendet markieren und sie trotzdem irgendwo verwenden. Außerdem ist diese Methode je nach Kontext möglicherweise zu ausführlich.
Diese Methode hat den Vorteil, dass sie präzise ist. Die Verwendung ist
/*jslint unparam*/
möglicherweise zu weit gefasst.quelle
Wie wäre es mit
void
, um deutlich zu 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 bei abstrakten Funktionen, von denen erwartet wird, dass sie überschrieben werden, bei denen Sie jedoch die Signatur anzeigen möchten, oder bei Verspottungen, bei denen Sie Argumente ignorieren, aber mit der Signatur der verspotteten Funktion übereinstimmen möchten.
quelle
void
UrsachenExpected 'undefined' and instead saw 'void'
. Verwenden vonundefined(i, any, other, unused, vars);
Pässen JSLint.Ich benenne "i" in "unbenutzt" um. Der Fehler bleibt offensichtlich bestehen, aber ich sehe ihn in der Liste und weiß, dass ich diesen Fehler "überprüft" habe und damit einverstanden bin.
quelle
In diesem speziellen Fall der Transformation eines Arrays / Objekts ist http://api.jquery.com/jquery.map/ (oder http://api.jquery.com/map/ ?) Eine Option.
var items = "<option selected></option>" + $.map(data, function (item) { return "<option value='" + item.Value + "'>" + item.Text + "</option>"; }).get().join('');
quelle
Wenn die Funktion mehr als einen nicht verwendeten Parameter hat, können Sie "ignorieren" wie folgt verwenden:
function (ignoreFoo, ignoreBar, baz) { }
Es muss einfach mit dem reservierten Wort "ignore" beginnen (ignore, ignoreFoo, ignoreBar, ...).
quelle
videos.forEach(function (ignore, i, ignoreOne, ignoreTwo)