我想知道是否有可能通过javascript查找如果对eval()的调用有语法错误或未定义的变量等等...那么让我说我使用eval进行一些任意的javascript是否有办法捕获该评估的错误输出?
答案 0 :(得分:56)
您可以测试错误是否确实是一个SyntaxError。
try {
eval(code);
} catch (e) {
if (e instanceof SyntaxError) {
alert(e.message);
}
}
答案 1 :(得分:11)
当使用try catch捕获特定类型的错误时,应该确保不会抑制其他类型的异常。否则,如果评估的代码会抛出不同类型的异常,它可能会消失并导致代码的意外行为。
我建议写这样的代码:
try {
eval(code);
} catch (e) {
if (e instanceof SyntaxError) {
alert(e.message);
} else {
throw( e );
}
}
请注意“其他”部分。
答案 2 :(得分:2)
您可以使用包含用javascript编写的javascript解析器的JsLint。它将为您提供有关您的代码的大量信息,可以将其配置为更轻松与否等等......
答案 3 :(得分:1)
要在验证后继续使用代码,请使用以下示例:
var validCode = 1;
try {
eval( jsCode ); /* Code test */
} catch (e) {
if (e instanceof SyntaxError) {
validCode = 0;
console.warn(e.message);
}
} finally {
if(validCode){
"do some magic"
}
}
答案 4 :(得分:0)
根据Mozilla documentation for eval
:
eval返回最后评估的表达式的值。
所以我觉得你可能运气不好。同一文档还建议不要使用eval
:
eval()是一个危险的函数,它使用调用者的特权执行它传递的代码。如果您使用可能受恶意方影响的字符串运行eval(),您最终可能会使用您的网页/扩展程序的权限在用户的计算机上运行恶意代码。更重要的是,第三方代码可以看到调用eval()的范围,这可能导致类似函数不受影响的可能攻击。
所以无论如何,在使用此功能之前请注意风险。
答案 5 :(得分:0)
go-oleg向他发布的以下代码
此代码验证正确的语法,否则返回错误
注意:代码不是vaildate运行时错误,因为它使用ast解析器分析正确的语法。
要安装
npm install esprima --save
代码:
var esprima = require('esprima');
var userStringToTest = 'var a = 50;';
var isValid = isValidJs(userStringToTest);
if(isValid) {
alert('its validated!');
}
else {
console.log('its NOT valid syntax!');
}
function isValidJs(testString) {
var isValid = true;
try {
esprima.parse(testString);
}
catch(e) {
isValid = false;
}
return isValid;
}
答案 6 :(得分:0)
为 b 输入你想要的值
//b="4+6";
try { eval(b); }
catch (err) {
if (err instanceof SyntaxError)
document.getElementById('screen').innerHTML = "<i>Syntax Error</i>";
/*In html make a div and put id "screen" in it for this to work
you can also replace this line with document.write or alert as per your wish*/
}
finally {
document.getElementById('screen').innerHTML = eval(b); //outputs answer
}