co mogę zrobić, jeśli JSLint narzeka, że „i” jest nieużywaną zmienną w takim scenariuszu:
var items = "<option selected></option>";
$.each(data, function (i, item) {
items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
(i, item) jest wymaganą kolejnością parametrów i używam tylko „item”.
Czy jest jakieś inne rozwiązanie niż tolerowanie nieużywanych zmiennych lub przepisywanie $ .each do używania indeksu, obu rozwiązań, których wolałbym nie robić?
Z góry dziękuję.
Aktualizacja: Doceniam wszystkie sugestie, ale ten kod jest po prostu przykładem, który pokazuje, co mam na myśli i jestem zainteresowany, aby zobaczyć ogólne rozwiązanie, jeśli takie istnieje. Dzięki.
javascript
jquery
jslint
TheFitGeekGirl
źródło
źródło
this
=item
( api.jquery.com/jQuery.each ), więc nie musisz używać żadnego parametru. Ale na to pytanie należy prawdopodobnie odpowiedzieć w bardziej ogólnym sensie.$.each(data, function (, item)
_
nieużywanego parametru , ale nie widzę sposobu, aby powiedzieć JSLint, aby specjalnie go ignorował_
, chociaż byłoby to naprawdę miłe.Odpowiedzi:
Próbować:
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
źródło
$.each([{a:0},{a:1},{a:2},{a:3}], function(){ console.log(this.a)})
unparam
nie jest już obsługiwany przez JSLint. Zamiast tego dostarcza noweignore
słowo kluczowe opisane w odpowiedzi poniżej.Myślę, że to musi być nowe w: http://www.jslint.com/help.html
„JSLint wprowadza nowe zastrzeżone słowo: ignoruj”
Więc powyższe staje się po prostu:
$.each(data, function (ignore, item) {
i => ignoruj ... zbyt łatwo. Reszta kodu może pozostać taka sama, przeglądarki są szczęśliwe, a JSLint jest szczęśliwy
Wcześniejsza (zła) odpowiedź:
Aby uspokoić zarówno JsLint, jak i przeglądarki, musiałem użyć:
Przeglądarka zawiesiła się na „undefined (d)”, ponieważ undefined nie był funkcją. Tak więc "undefined! == win.undefined" pomija wiersz, jeśli jesteśmy w przeglądarce.
źródło
ignore
sposób pomijania ostrzeżeń nie działa, jeśli ta sama funkcja ma więcej niż jeden nieużywany parametr.możesz to zrobić:
var items = "<option selected></option>"; $.each(data, function () { var item = arguments[1]; items += "<option value='" + item.Value + "'>" + item.Text + "</option>"; });
... ale to prawdopodobnie gorzej, jeśli o mnie chodzi.
źródło
Możliwym sposobem pozbycia się ostrzeżenia w sposób dość samodokumentujący jest spowodowanie, że nieużywana zmienna zostanie wykorzystana, na przykład:
// 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>"; });
Oczywiście teraz możesz dostać się do sytuacji, w której oznaczysz zmienną jako nieużywaną i nadal gdzieś jej używasz. Ponadto ta metoda może być zbyt szczegółowa, w zależności od kontekstu.
Ta metoda ma tę zaletę, że jest precyzyjna. Użycie
/*jslint unparam*/
może być zbyt szerokie.źródło
Co powiesz na użycie,
void
aby wyraźnie zaznaczyć, że celowo nie używasz zmiennej?$.each(data, function (i, item, any, other, unused, vars) { void(i, any, other, unused, vars); items += "<option value='" + item.Value + "'>" + item.Text + "</option>"; });
Jest to również przydatne w funkcjach abstrakcyjnych, które mają zostać nadpisane, ale gdzie chcesz pokazać podpis lub w makietach, w których ignorujesz argumenty, ale chcesz dopasować podpis funkcji mockowanej.
źródło
void
przyczynExpected 'undefined' and instead saw 'void'
.undefined(i, any, other, unused, vars);
Jednak użycie przekazuje JSLint.Zmieniam nazwę „i” na „nieużywane”. Oczywiście nadal pozostawia błąd, ale widzę go na liście i wiem, że „sprawdziłem” ten błąd i zgadzam się z tym.
źródło
W tym konkretnym przypadku transformacji tablicy / obiektu http://api.jquery.com/jquery.map/ (lub http://api.jquery.com/map/ ?) Jest opcją.
var items = "<option selected></option>" + $.map(data, function (item) { return "<option value='" + item.Value + "'>" + item.Text + "</option>"; }).get().join('');
źródło
Jeśli funkcja ma więcej niż jeden nieużywany parametr, możesz użyć „ignoruj” w ten sposób:
function (ignoreFoo, ignoreBar, baz) { }
Musi po prostu zaczynać się od zarezerwowanego słowa „ignore” (ignore, ignoreFoo, ignoreBar, ...).
źródło
videos.forEach(function (ignore, i, ignoreOne, ignoreTwo)