JavaScript:Catch未命中“未捕获的语法错误”[Chrome]
有人能向我解释一下,为什么一个未捕获的SyntaxError不能通过try/catch来处理吗?是否有可能优雅地处理这种类型的错误,以便运行其余的JS 例如:JavaScript:Catch未命中“未捕获的语法错误”[Chrome],javascript,error-handling,console,try-catch,syntax-error,Javascript,Error Handling,Console,Try Catch,Syntax Error,有人能向我解释一下,为什么一个未捕获的SyntaxError不能通过try/catch来处理吗?是否有可能优雅地处理这种类型的错误,以便运行其余的JS 例如: try { response.write(;); } catch(e) { console.log(e); } 此代码抛出一个未捕获的SyntaxError:意外标记;[Chrome]浏览器错误,而不是跳转到捕获并记录错误对象。在Firefox中也会得到类似的结果;抛出的错误,而不是用catch处理它。好吧,因为这是一个语法异常,这意味
try { response.write(;); }
catch(e) { console.log(e); }
此代码抛出一个未捕获的SyntaxError:意外标记;[Chrome]浏览器错误,而不是跳转到捕获并记录错误对象。在Firefox中也会得到类似的结果;抛出的错误,而不是用catch处理它。好吧,因为这是一个语法异常,这意味着javascript解析器无法解析您的代码。因为浏览器无法解析您的代码,所以无法执行它。它甚至不知道您的try/catch块。try/catch块只能捕获由于在块上下文中执行代码而引发的异常。由于这是一个语法异常,这意味着javascript解析器无法解析您的代码。因为浏览器无法解析您的代码,所以无法执行它。它甚至不知道您的try/catch块。try/catch块只能捕获由于在块上下文中执行代码而引发的异常。语法错误不是运行时异常。为了让您的程序能够抛出和捕获异常,它需要能够运行。为了运行,它需要是javascript。上面的示例不是有效的javascript。当解释器看到第一个无效行时,它会放弃并打印一个错误,甚至从未到达catch行。语法错误不是运行时异常。为了让您的程序能够抛出和捕获异常,它需要能够运行。为了运行,它需要是javascript。上面的示例不是有效的javascript。当解释器看到第一个无效的行时,它会放弃并打印一个错误,它甚至从未到达捕获行。对此,您可以使用一种解决方法
try {
Function('response.write(;);')
} catch(e) {
console.log(e);
}
可用于确定以下方式:
var isEs6Template;
try {
Function('``');
isEs6Template = true;
} catch(e) {
isEs6Template = false;
}
console.log('es6 template is', isEs6Template ? 'supported' : 'unsupported');
对此,您可以使用变通方法
try {
Function('response.write(;);')
} catch(e) {
console.log(e);
}
可用于确定以下方式:
var isEs6Template;
try {
Function('``');
isEs6Template = true;
} catch(e) {
isEs6Template = false;
}
console.log('es6 template is', isEs6Template ? 'supported' : 'unsupported');
精辟的解释。我希望有人能在我学习JS时向我解释这一点。我希望有人能在我学习JS时向我解释这一点。为了捕获在脚本模块中使用appendChild时发生的错误,我使用了一个临时window.OneError listener,我将其包装在承诺中。为了捕获在脚本模块中使用appendChild时发生的错误,我使用了一个临时window.OneError listener,我的承诺。