【问题标题】:Catch invalid variable name with SyntaxError使用 SyntaxError 捕获无效的变量名
【发布时间】:2018-01-03 03:25:26
【问题描述】:

首先,catch 子句没有被执行。但我在浏览器中收到“SyntaxError: missing exponent”错误。我想知道是不是因为加载时间?或者我的设置不对。

我想为不正确的变量名生成自定义错误。

try {
  var 1ele = 1;
} catch (error) {
  if (error instanceOf SyntaxError) {
    throw new SyntaxError("There is a syntax error!");
  }
}

感谢您的帮助。

【问题讨论】:

  • 您遇到语法错误。 catch 捕获运行时错误。 (除非你正在做evals,否则不要试图捕捉语法错误。)还有两件事......不要以数字开头你的变量并且你的变量有指数错误,因为它正在读取1e并思考它是一个指数,指数跟在 e 之后。
  • @pepperjack — 大部分都很好,但 var 1ele 是一个直接的语法错误:var 必须后跟一个有效的标识符,它不能以数字开头,因此在 1 处失败,解析器不会再进一步​​。 ;-)
  • @RobG 正如他所说,他的语法错误是SyntaxError: missing exponent。在他的情况下确实达到了。你没有错,变量存在语法错误,但对于他的浏览器,它在上述错误处停止(或至少抛出)。
  • 我不确定你要做什么,但这不是一个有效的 js 变量名。
  • @pepperjack — 奇怪,没有理由这样做,显示了解析器的变幻莫测。 Chrome 给出了“无效或意外的令牌”,这是预期的(而 IE 给出了“预期的标识符”)。

标签: javascript error-handling try-catch


【解决方案1】:

您在代码var 1ele = 1; 中引入了语法错误,并打算捕获该错误以显示自定义错误消息。但是,这不会以您现在编写的方式工作,因为语法错误会导致 JavaScript 解析器在遇到语法错误后很快停止。您的代码中的catch 部分将永远无法访问。

但是,您可以使用eval 语句来实现相同的功能。试试下面的代码。

try {
  eval("var 1ele = 1");
} catch (error) {
  if (error instanceof SyntaxError) {
    throw new SyntaxError("There is a syntax error!");
  }
}

在这里,我将导致变量声明的语法错误包装在 eval 函数中。这只会在执行eval 语句的环境中导致语法错误,而不是在您的主代码中。您将能够捕获错误并显示您的自定义消息。

注意 1:您收到 "SyntaxError: missing exponent" 错误消息,因为您的变量名称以 1e 开头,这使 JavaScript 解析器认为它是指数格式的数字。

注意 2: 您在代码中使用了 instanceOf。它实际上是instanceof(带有小写的o)。 Ref

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 2016-10-17
    • 2017-02-07
    • 2017-05-02
    • 1970-01-01
    • 2018-08-25
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多