error-handling - new - try catch nodejs
Error de JSLint: se esperaba "ignorar" y en su lugar se vio "ex" (1)
Uso JSLint todo el tiempo, pero justo hoy, me encontré con un error que nunca había visto antes. Con el siguiente código, recibí el error que se muestra a continuación:
try {
document.execCommand(''BackgroundImageCache'', false, true);
} catch (ex) {}
Error:
Expected ''ignore'' and instead saw ''ex''.
} catch (ex) {}
Así que cambié mi código a lo siguiente, y el error desapareció:
try {
document.execCommand(''BackgroundImageCache'', false, true);
} catch (ignore) {}
No puedo encontrar ninguna explicación en Internet sobre por qué esto solucionaría el error. ¿Alguien sabe qué pasa o por qué esto solucionó el problema?
Gracias.
Creo que tienes razón, jslint no solía quejarse así. En cambio, te dijo que necesitabas hacer algo con ex
, ¿verdad? Voy a revisar github para ver y editar esto más tarde. EDITAR : gran captura [por ti]! Crockford, el autor de JSLint, agregó esto el 29 de abril de este año alrededor de la línea 3444. Y usa bloques de catch
vacíos en la fuente de jslint, así que supongo que también tiene que darnos el kludge. ; ^)
JSLint quiere que elimines catch
bloques de catch
vacíos con ignore
como nombre de variable para que sea obvio para las personas que leen tu código que intencionalmente no quisiste hacer nada en tu bloque de catch
. Como dice Crockford en otra parte , siente que "es difícil escribir programas correctos mientras se usan idiomas que son difíciles de distinguir de los errores obvios".
1.) ex
usado (ok)
Entonces (como supongo que sabes) si escribes este código y haces algo con ex
, jslint no se queja.
/*jslint browser: true, white:true, sloppy:true*/
var spam;
try {
spam = "spam";
} catch (ex) {
window.alert(ex);
}
2.) ex
no utilizado significa ignore
(está bien también)
Entonces, si quiere no hacer nada con ex
, él quiere que el código le diga a la gente que no cometió errores al dejar a su ex
equivalente allí al nombrar esa variable como ignore
.
/*jslint browser: true, white:true, sloppy:true*/
var spam;
try {
spam = "spam";
} catch (ignore) {
}
3.) ignore
usado (error!)
Así que, en la moda típica de Crockford, ¡ahora no puedes usar ignore
y hacer algo en el bloque catch
!
/*jslint browser: true, white:true, sloppy:true*/
var spam;
try {
spam = "spam";
} catch (ignore) {
window.alert(ignore);
}
Eso da
Inesperado ''ignorar''.
} catch (ignore) {
Solo otro movimiento hiperintencito de "no cometa un código que parezca un error" de Crockford.
(Aparte: podría ser divertido echar un vistazo a Por qué son una mala idea los bloqueos vacíos son una mala idea mientras estás en el tema. Honestamente, aunque ignore
es probablemente una convención útil, basada en esa discusión (quiero decir, incluye a Skeet argumentando en contra bloques de catch
vacíos!), estoy un poco sorprendido de que Crockford permita que se ignore
kludge, ya que el enlace anterior tiene argumentos que se parecen mucho a los de él por llamar "inseguras" a algunas expresiones regulares.