¿Qué puedo hacer si JSLint se queja de que "i" es una variable no utilizada en tal escenario?
var items = "<option selected></option>";
$.each(data, function (i, item) {
items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
(i, item) es el orden requerido de parámetros y solo estoy usando "item".
¿Hay alguna otra solución que tolerar las variables no utilizadas o reescribir el $ .each para usar el índice, ambas soluciones que preferiría no hacer?
Gracias por adelantado.
Actualización: Agradezco todas las sugerencias, pero este código es simplemente un ejemplo para mostrarle lo que quiero decir y estoy interesado en ver una solución general, si la hay. Gracias.
javascript
jquery
jslint
TheFitGeekGirl
fuente
fuente
this
=item
( api.jquery.com/jQuery.each ), por lo que no tendría que usar ninguno de los parámetros. Pero esta pregunta probablemente debería responderse en un sentido más general.$.each(data, function (, item)
_
para un parámetro no utilizado , pero no veo forma de decirle a JSLint que lo ignore específicamente_
, aunque eso sería realmente bueno.Respuestas:
Tratar:
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
fuente
$.each([{a:0},{a:1},{a:2},{a:3}], function(){ console.log(this.a)})
unparam
JSLint ya no es compatible. En cambio, proporciona la nuevaignore
palabra clave que se describe en una respuesta a continuación.Creo que esto debe ser nuevo en: http://www.jslint.com/help.html
"JSLint introduce una nueva palabra reservada: ignorar"
Entonces lo anterior simplemente se convierte en:
$.each(data, function (ignore, item) {
i => ignorar ... demasiado fácil. El resto del código puede permanecer igual, los navegadores están contentos y JSLint está contento
Respuesta anterior (incorrecta):
Para aplacar tanto a JsLint como a los navegadores, necesitaba usar:
El navegador se bloqueó en "undefined (d)" debido a que undefined no es una función. Entonces, "undefined! == win.undefined" salta la línea si estamos en un navegador.
fuente
ignore
forma de suprimir las advertencias falla si la misma función tiene más de un parámetro sin usar.podrías hacer esto:
var items = "<option selected></option>"; $.each(data, function () { var item = arguments[1]; items += "<option value='" + item.Value + "'>" + item.Text + "</option>"; });
... pero probablemente sea peor si me preguntas.
fuente
Una forma posible de deshacerse de la advertencia de una manera bastante autodocumentada es hacer que la variable no utilizada se utilice, así:
// 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>"; });
Por supuesto, ahora puede entrar en la situación en la que marca una variable como no utilizada y aún la usa en alguna parte. Además, este método puede ser demasiado detallado, según el contexto.
Este método tiene la ventaja de que es preciso. El uso
/*jslint unparam*/
puede ser demasiado amplio.fuente
¿Qué tal usar
void
para hacer explícito que no está usando intencionalmente 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>"; });
Esto también es útil en funciones abstractas que se espera que se sobrescriban, pero donde desea mostrar la firma, o en simulaciones, donde ignora los argumentos, pero desea hacer coincidir la firma de la función simulada.
fuente
void
causasExpected 'undefined' and instead saw 'void'
.undefined(i, any, other, unused, vars);
Sin embargo, el uso de pasa JSLint.Cambio el nombre de "i" como "no utilizado". Todavía deja el error obviamente, pero lo veo en la lista y sé que he "verificado" ese error y estoy de acuerdo con él.
fuente
En este caso particular de transformar una matriz / objeto, http://api.jquery.com/jquery.map/ (o http://api.jquery.com/map/ ?) Es una opción.
var items = "<option selected></option>" + $.map(data, function (item) { return "<option value='" + item.Value + "'>" + item.Text + "</option>"; }).get().join('');
fuente
Si la función tiene más de un parámetro sin usar, puede usar "ignorar" así:
function (ignoreFoo, ignoreBar, baz) { }
Simplemente debe comenzar con la palabra reservada "ignore" (ignore, ignoreFoo, ignoreBar, ...).
fuente
videos.forEach(function (ignore, i, ignoreOne, ignoreTwo)