如何在JavaScript中捕获SyntaxError

How to catch a SyntaxError in JavaScript

本文关键字:SyntaxError JavaScript      更新时间:2023-09-26

我试图在代码中捕获语法错误,但它没有进入捕获块

( function(){
try {
 throw fn(){};  // I am trying to generate some syntax error here
}catch (exception){
    console.log(exception.message);
  }
})();

已编辑

如果你在这里注意到try块中有错误的语法,那么根据javascript理论,它必须首先进入catch块,然后使用内置对象SyntaxError

( function(){
try {
throw fn(){};
}catch (exception){
   if(exception instanceof SyntaxError)
   console.log("Syntax Exception occured" + exception.message); 
}
})();

但这并没有在程序中处理,相反,我可以直接在控制台中看到"未捕获的SyntaxError"

Uncaught SyntaxError: Unexpected token {
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

您不能仅仅因为未评估整个脚本(由于语法错误。。。我唯一能想象的就是将代码作为字符串,然后将其传递给eval(),并将eval包装成try catch。。。

但如果你那样做,地球就会坍塌。。。

var test="var x= 1.5.5;"; //this is a syntax error
var test2="var x=1;"
try {
  eval(test)
  alert(test + ' is a valid script')
} catch(e) {
  alert(test + ' is not a valid script')
}
try {
  eval(test2)
  alert(test2 + ' is a valid script')
} catch(e) {
  alert(test2 + ' is not a valid script')
}