try nodejs new es6 error ejemplo catch error-handling try-catch jslint

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.