eval javascript,检查语法错误

时间:2011-02-07 15:51:54

标签: javascript eval

我想知道是否有可能通过javascript查找如果对eval()的调用有语法错误或未定义的变量等等...那么让我说我使用eval进行一些任意的javascript是否有办法捕获该评估的错误输出?

7 个答案:

答案 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
    }