JavaScript:没有点击“Uncaught SyntaxError”[Chrome]

时间:2011-06-30 14:04:29

标签: javascript error-handling console try-catch syntax-error

有人可以向我解释为什么try / catch不会处理“Uncaught SyntaxError”吗?是否可以优雅地处理这种类型的错误,以便JS的其余部分运行?

例如:

try { response.write(;); }
catch(e) { console.log(e); }

此代码抛出“Uncaught SyntaxError:Unexpected token;” [Chrome]浏览器错误,而不是跳转到catch并记录错误对象。你在Firefox中也得到了类似的结果;抛出错误而不是用catch来处理它。

3 个答案:

答案 0 :(得分:5)

语法错误不是运行时异常。为了使您的程序能够抛出并捕获异常,它需要能够运行。为了运行,它需要是javascript。上面的例子不是有效的javascript。解释器在看到第一个无效行时放弃并打印错误,它甚至不会到达“catch”行。

答案 1 :(得分:4)

好吧,因为这是一个语法异常,这意味着javascript解析器无法解析您的代码。由于浏览器无法解析您的代码,因此无法执行它。它甚至不知道你的try / catch块。 try / catch块只能捕获由于在块的上下文中执行代码而抛出的异常。

答案 2 :(得分:3)

您可以使用解决方法。

try {
    Function('response.write(;);')
} catch(e) {
    console.log(e);
}

可用于以这种方式确定es6 template string support

var isEs6Template;
try {
    Function('``');
    isEs6Template = true;
} catch(e) {
    isEs6Template = false;
}

console.log('es6 template is', isEs6Template ? 'supported' : 'unsupported');