2011-02-07 11 views
33

Quería saber si es posible encontrar a través de javascript si una llamada a eval() tiene un error de sintaxis o una variable indefinida, etc ... así que digamos que uso eval para algunos arbitrarios javascript ¿hay alguna forma de capturar el resultado de error de esa evaluación?eval javascript, compruebe el error de sintaxis

Respuesta

49

Puede probar para ver si un error es de hecho un SyntaxError.

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } 
} 
+0

Me pregunto por qué no probé esto yo mismo. ¡Muchas gracias! –

+3

@Jesus: el hecho de que te lo estés preguntando es algo bueno. En fin, buena suerte. – ChaosPandion

0

De acuerdo con la Mozilla documentation for eval:

eval devuelve el valor de la última expresión evaluada.

Así que creo que puede estar de suerte. Este mismo documento también se desaconseja el uso de eval:

eval() es una función peligrosa, que ejecuta el código que ha pasado con los privilegios de la persona que llama. Si ejecuta eval() con una cadena que podría verse afectada por una parte maliciosa, puede terminar ejecutando código malicioso en la máquina del usuario con los permisos de su página web/extensión. Más importante aún, el código de un tercero puede ver el alcance en el que se invoca eval(), lo que puede conducir a posibles ataques en formas en que la función similar no es susceptible.

De todos modos, tenga en cuenta los riesgos antes de utilizar esta función.

+2

Acerca de eval being evil, regla de oro: No evalúe la entrada del usuario, solo evalúe las cadenas que usted mismo definió, por ejemplo: desde un servidor. Sí, ataque MiTM, pero si no puedes confiar en tu servidor, entonces tienes mayores problemas. – CularBytes

1

Puede usar http://www.jslint.com/ que contiene un analizador de javascript escrito ni javascript. Le dará mucha información sobre su código, puede configurarse para ser más relajado o no, etc. ...

+0

+1 para JSLint. :-) – Martijn

+0

http://www.jshint.com es bueno también. – Andrew

11

Al utilizar try catch para detectar un tipo de error en particular, debe asegurarse de que no se den otros tipos de excepciones. suprimido De lo contrario, si el código evaluado arrojara un tipo diferente de excepción, podría desaparecer y provocar un comportamiento inesperado del código.

Yo sugeriría que escribe código como este:

try { 
    eval(code); 
} catch (e) { 
    if (e instanceof SyntaxError) { 
     alert(e.message); 
    } else { 
     throw(e); 
    } 
} 

Tenga en cuenta la sección de "otra cosa".

+0

throw no es una función – Dev

Cuestiones relacionadas