Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:Catch未命中“未捕获的语法错误”[Chrome]_Javascript_Error Handling_Console_Try Catch_Syntax Error - Fatal编程技术网

JavaScript:Catch未命中“未捕获的语法错误”[Chrome]

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处理它。好吧,因为这是一个语法异常,这意味

有人能向我解释一下,为什么一个未捕获的SyntaxError不能通过try/catch来处理吗?是否有可能优雅地处理这种类型的错误,以便运行其余的JS

例如:

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,我的承诺。