当JavaScript引擎在解析代码时遇到不符合语言语法的标记或令牌顺序时,抛出SyntaxError.
但如果出现语法错误,程序怎么可能首先运行?
如何捕获JavaScript语法错误?
roh*_*hpr 15
您不能使用try-catch块来处理语法错误,因为它们在解析代码时被抛出而不是在运行时抛出.
但是,您可以使用window.onerror并确定存在错误.您必须确保该onerror函数是在单独的脚本标记中定义的,而不是在可能存在错误的标记中定义的!
例如:
这不起作用,因为抛出错误时脚本尚未开始运行:
<script>
window.onerror = function (e) {
console.log('Error: ', e);
};
console.log('a'');
</script>
Run Code Online (Sandbox Code Playgroud)
这将有效:
<script>
window.onerror = function (e) {
console.log('Error: ', e);
};
</script>
<script>
console.log('a'');
</script>
Run Code Online (Sandbox Code Playgroud)
obe*_*msi 12
它是运行时错误,可以通过try-catch捕获,而不是语法错误(如果您eval的代码 可以处理恶意代码中的语法错误,但这很奇怪).
我建议你阅读这些:
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Statements#try...catch_Statement
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Statements#Exception_Handling_Statements
在JS世界中,SyntaxError可以是运行时异常。例如,当尝试解析非JSON格式的JSON响应时,可能会出现这种情况。服务器可以发送回很多类型的响应,因此,如果您对期望在主体中使用JSON的请求发送HTML主体响应,SyntaxError则将引发JS。在这种情况下,您会收到一条类似于以下内容的错误消息:SyntaxError: JSON Parse error: Unrecognized token '<'。
但是您还可以获得其他运行时SyntaxErrors。Mozilla在此处提供了一些列表:用于JSON解析的SyntaxErrors
您可能想在代码中捕获它们。您可以使用通用的try / catch块来执行此操作,如下所示:
try {
JSON.parse('<html></html>');
} catch (e) {
console.log("I catch & handle all errors the same way.");
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以专门查找SyntaxError:
try {
JSON.parse('<html></html>');
} catch (e) {
if (e instanceof SyntaxError) {
console.log("I caught a pesky SyntaxError! I'll handle it specifically here.");
} else {
console.log("I caught an error, but it wasn't a SyntaxError. I handle all non-SyntaxErrors here.");
}
}
Run Code Online (Sandbox Code Playgroud)
Mozilla甚至提供了有关JS错误以及如何处理它们的更多信息。