que javascription hace javascript syntax error-handling

javascription - ¿Es posible detectar de manera programática JavaScript SyntaxErrors?



javascription void 0 (3)

No creo que esto sea factible, pero quería compartirlo con la comunidad para confirmar mis sospechas.

Digamos que estás escribiendo un programa en otro idioma como Python, PHP o ASP. Este programa está destinado a construir otro programa escrito en JavaScript. Sin embargo, desafortunadamente el primer programa no es inmune a los errores. Entonces, de vez en cuando, el programa que crea el programa JavaScript hace algunas cosas originales y genera un error de sintaxis en el código fuente de JavaScript. Ahora, algún usuario va y carga el programa y esencialmente se detiene, porque el navegador web que lo ejecuta no puede analizar correctamente el JavaScript. Este usuario probablemente no sea feliz. Yo no estaría.

Esto me lleva a mi pregunta. ¿Es posible escribir un controlador de errores que atrape este tipo de problemas de sintaxis permitiendo que la aplicación falle con elegancia?

Aquí hay un ejemplo:

<html> <head> <script type="text/javascript" charset="utf-8"> window.onerror = errorHandler; function errorHandler(a,b,c) { alert(''horray! No wait, Booo!''); } vara jfs; </script> </head> <body> Can this be done? </body> </html>

o

<html> <head> <script type="text/javascript" charset="utf-8"> try { vara jfs; } catch (e) { alert(''horray! No wait, Booo!''); } </script> </head> <body> Can this be done? </body> </html>


En general, se analiza un lenguaje de programación, y si tiene éxito, posiblemente se compila en otra forma, y ​​si tiene éxito, entonces se interpreta / ejecuta en hardware o en vm. El hecho de que el código pase una fase no significa que sea un código válido.

Usted está preguntando si el código que se está ejecutando en la última fase, puede estar al tanto de los problemas encontrados en la primera parte y manejarlos.

Algunos idiomas ofrecen varios enganches en su propio mecanismo de análisis y compilación. Como mencionó Cheeso, eval es la forma de llamar de Javascript a este mecanismo.

En lugar de envolver todos sus scripts en cadenas, sería mejor dejarlos en archivos javascript y cargarlos en su programa principal con el siguiente javascript (o similar).

function load(file){ var client = new XMLHttpRequest(); client.open("GET", file, false); client.send(null); return client.responseText; } function include(file){ try { eval(load(file)); } catch (e) { alert("problem with file " + file); } }


Google lanzó su conjunto de herramientas Closure, que incluye un compilador de JavaScript y un minimizador. No lo he usado personalmente, pero he escuchado muchas cosas buenas. Además, aparentemente lo ayuda a encontrar problemas de compatibilidad con el navegador.

No creo que te ayude a realizar análisis en tiempo real, pero podría ser una herramienta valiosa.


Si se siente cómodo con la exposición a la seguridad, puede llamar a eval() en el código en cuestión para detectar errores de sintaxis.

function say(x) { ... emit message in some way.... } var scriptlets = [ "foof1 = function(a) {if (a == 7) { return /"A-OK/"; } } ", "foof2 = function (a) {if argle bargle seventy 7, then this isn''t going to work}" ]; function verifyScriptlet(n) { var s = scriptlets[n]; try { var x = eval(s); say("verified #"+ n +", result: " + (typeof x)); } catch (exc1) { say("Exception while verifying #"+ n +": " + exc1.message); } } verifyScriptlet(0); verifyScriptlet(1);