2011-02-07 123 views
33

我想知道是否可以通过JavaScript找到,如果调用的eval()有语法错误或不确定的变量,等等......所以可以说我用eval一些任意有没有一种方法来捕获该eval的错误输出?的eval的JavaScript,检查语法错误

回答

49

您可以测试,看看是否出现错误的确是一个SyntaxError。

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

我不知道为什么我没有尝试这个自己。非常感谢! – 2011-02-07 16:37:37

+3

@耶稣 - 你想知道的事实是一件好事。无论如何,祝你好运。 – ChaosPandion 2011-02-07 18:00:19

0

按照Mozilla documentation for eval

EVAL返回最后计算的表达式的值。

所以我认为你可能是出于运气。此相同的文件还建议不要使用eval

的eval()是一个危险的功能,它执行它与调用者的权限通过代码。如果您运行的eval()字符串可能会受到恶意方的影响,那么您最终可能会在您的网页/扩展程序的权限下在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到eval()被调用的范围,这可能导致类似函数不容易受到的攻击。

因此,无论如何,请注意使用此功能之前的风险。

+2

关于eval是邪恶的,黄金法则:不要评估用户输入,只会评估自己定义的字符串,例如:从服务器。是的,MiTM攻击,但如果你不能信任你的服务器,那么你就有更大的问题。对于JSLint,为 – CularBytes 2016-09-16 09:24:53

1

您可以使用http://www.jslint.com/包含NI写JavaScript中的JavaScript分析器。它会给你许多关于你的代码信息,它可以配置更加放松与否,等等

+0

+1。 :-) – Martijn 2011-02-07 16:11:47

11

当使用尝试捕捉捕捉特定类型的错误,应该确保其他类型的异常不supressed。否则,如果评估代码会抛出不同类型的异常,它可能会消失并导致代码的意外行为。

我建议书面方式这样的代码:

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

请注意, “其他” 一节。