2011-05-11 14 views
5

MDN states:Los errores de sintaxis se pueden atrapar en JavaScript?

Un SyntaxError se inicia cuando el motor de JavaScript se encuentra con fichas o para señal de que no se ajusta a la sintaxis de la lengua al analizar código.

Pero si hay un error de sintaxis, ¿cómo podría incluso ejecutarse el programa en primer lugar?

¿Cómo se pueden detectar los errores de sintaxis de JavaScript?

+0

relacionado: http://stackoverflow.com/questions/12219154/ignore-javascript-errors-in-a-page-and-continue-executing-the-script –

Respuesta

5

Es errores de ejecución que se pueden capturar con try-catch, no errores de sintaxis (si eval su código que puede manejar los errores de sintaxis en el código evaled pero eso es simplemente extraño).

lo recomiendo que leas los siguientes:

+1

Su enlace apunta a una página de "contenido movido". .. –

+0

+1 en el código de evaluación en excistance y catching excepciones en los errores de sintaxis que son posibles, pero wonky. – Martijn

+0

hey que es un enlace roto – Pacerier

0

Si usted está tratando de asegurarse de que usted ha escrito JavaScript sintácticamente válida, No puedo recomendar JSLint o JSHint lo suficientemente fuerte.

  1. Learn it. Use it.
  2. Conviértete en un mejor programador de JavaScript.
  3. ???
  4. ¡Ganar!
+1

9gagger, ¿y tú? – Santosh

4

Usted puede coger el programador de tiempo de ejecución generado y excepciones pero no se puede coger errores de sintaxis JavaScript, pesar de que puede manejarlos en algunos navegadores usando window.onerror.

Esto está tomado del libro JavaScript- The Complete Reference by Thomas-Powell que me gusta mucho. Puede consultar los ejemplos de código en ese libro.

+0

¿Tiene un ejemplo de código? ¿A qué navegadores te refieres? – Pacerier

4

No se pueden usar los bloques try-catch para manejar los errores de sintaxis a medida que se generan mientras se analiza el código y no mientras se está ejecutando.

Sin embargo, puede usar window.onerror y descubrir que hay un error. Debe asegurarse de que la función onerror esté definida en una etiqueta de script separada y no en la etiqueta en la que puede estar presente el error.

Ej:

Esto no funcionará, porque el guión todavía no ha empezado a funcionar cuando se lanza el error:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
    console.log('a''); 
</script> 

Esto funcionará:

<script> 
    window.onerror = function (e) { 
    console.log('Error: ', e); 
    }; 
</script> 
<script> 
    console.log('a''); 
</script> 

jsfiddle demo

0

En el mundo JS, SyntaxError PUEDE ser una excepción de tiempo de ejecución. Esto puede surgir, por ejemplo, cuando se intenta analizar una respuesta JSON que no es formato JSON. El servidor puede enviar muchos tipos de respuestas, por lo que si envía una respuesta de cuerpo HTML a su solicitud que espera JSON en el cuerpo, obtendrá un SyntaxError en el JS. En tal caso, obtendría un mensaje de error que se parece a esto: SyntaxError: JSON Parse error: Unrecognized token '<'.

Pero hay otros SyntaxErrors en tiempo de ejecución que también podría obtener. Mozilla tiene una lista de algunos aquí: SyntaxErrors for JSON parsing

Es posible que desee atraparlos en su código. Puede hacerlo con un bloque try/catch genérica como esto:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    console.log("I catch & handle all errors the same way."); 
} 

O usted puede buscar la SyntaxError específicamente:

try { 
    JSON.parse('<html></html>'); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
    console.log("I caught a pesky SyntaxError! I'll handle it specifically here."); 
    } else { 
    console.log("I caught an error, but it wasn't a SyntaxError. I handle all non-SyntaxErrors here."); 
    } 
} 

Mozilla tiene aún más info on JS errors and handling them.

Cuestiones relacionadas