javascript - all - Mensaje JSLint: variables no utilizadas
jslint npm (8)
¿Qué le parece usar el void
para hacer explícito que intencionalmente no está usando 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 en las que desea mostrar la firma, o en simulaciones, donde está ignorando argumentos, pero desea hacer coincidir la firma de la función burlada.
¿Qué puedo hacer si JSLint se queja de que "yo" es una variable no utilizada en dicho escenario?
var items = "<option selected></option>";
$.each(data, function (i, item) {
items += "<option value=''" + item.Value + "''>" + item.Text + "</option>";
});
(i, artículo) es el orden requerido de los parámetros y solo estoy usando "elemento".
¿Hay alguna otra solución que tolerar variables no utilizadas o reescribir $ .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 es que hay alguna. Gracias.
Cambio el nombre de "i" por "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.
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 son felices y JSLint es feliz
Respuesta anterior (incorrecta):
Para aplacar a JsLint y a los navegadores que necesitaba usar:
function (d, i) { if (undefined !== win.undefined) { undefined(d); } return (i); }
El navegador se bloqueó en "undefined (d)" debido a que undefined no es una función. Entonces, "undefined! == win.undefined" se salta la línea si estamos en un navegador.
En este caso particular de transformación de 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('''');
Si la función tiene más de un parámetro no utilizado, puede usar "ignorar" de esta manera:
function (ignoreFoo, ignoreBar, baz) {
}
Simplemente debe comenzar con la palabra reservada "ignorar" (ignorar, ignorarFoo, ignorarBar, ...).
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
Una posible manera de deshacerse de la advertencia de una manera que es bastante auto-documentada es hacer que la variable no utilizada se use, como esta:
// 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 todavía la usa en alguna parte. Además, este método podría ser demasiado detallado, dependiendo del contexto.
Este método tiene la ventaja de que es preciso. Usar /*jslint unparam*/
puede ser demasiado amplio.
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 eso es probablemente peor si me preguntas.