【问题标题】:Catch a referenceError in js在 js 中捕获一个引用错误
【发布时间】:2015-12-08 19:51:31
【问题描述】:

我有一个文本区域,用户可以在其中输入 javascript 代码,按下按钮后该代码将传递给 eval()。

当用户输入以下内容时,我无法捕捉到 referenceError:

var myName = Maria;

而不是

var myName = "Maria";

感谢您的宝贵时间!

【问题讨论】:

  • 用户输入的值始终是字符串。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 用户可以输入 javascript 代码,按下按钮时将 传递给 eval()
  • 您需要非常小心使用eval() 并在浏览器中执行用户代码,请确保在生产中使用类似的东西之前您知道自己在做什么
  • 你误解了我 - 用户不只是输入名称,而是整个 js 行,即 var myName = ... 然后通过 eval() 在 js 中执行,因此用户可以传递任何内容。因此,当用户忘记字符串周围的引号时,js 会抛出我需要捕获的 referenceError,因为我想编写代码以继续运行并给用户反馈。
  • 对于那些关心的人,我很清楚与 eval() 相关的风险

标签: javascript referenceerror


【解决方案1】:

好的,正如你所说你了解eval()的坑,我在这里提出一个解决方案。

try {
    var myName = Maria;
} catch (e) {
    if (e instanceof ReferenceError) {
        // Handle error as necessary
    }
}

【讨论】:

    【解决方案2】:

    尝试在 eval() 调用周围放置 try/catch block。像这样:

    try {
        eval(userInput);
    } catch (e) {
        // do something
    }
    

    (请注意,出于安全原因,将用户输入传递给 eval() 是您应该在真实站点上执行的操作。)

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 2017-12-09
      • 1970-01-01
      • 2016-09-26
      • 2018-04-14
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多