可以在JavaScript中捕获语法错误吗?

Pac*_*ier 14 javascript

MDN声明:

当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)

jsfiddle演示


obe*_*msi 12

它是运行时错误,可以通过try-catch捕获,而不是语法错误(如果您eval的代码 可以处理恶意代码中的语法错误,但这很奇怪).

我建议你阅读这些:


cjn*_*cjn 5

在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错误以及如何处理它们的更多信息

  • 检查它是否是 instanceOf SyntaxError。它帮助了我。 (2认同)