在 js 中捕获一个引用错误

Posted

技术标签:

【中文标题】在 js 中捕获一个引用错误【英文标题】:Catch a referenceError in 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() 相关的风险 【参考方案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() 是您应该在真实站点上执行的操作。)

【讨论】:

以上是关于在 js 中捕获一个引用错误的主要内容,如果未能解决你的问题,请参考以下文章

D3.js:“未捕获的语法错误:意外的令牌非法”?

01.js控制台

NodeJS - 未捕获的引用错误:未定义原始

Bootstrap 4,“未捕获错误:Bootstrap工具提示需要Tether(http://github.hubspot.com/tether/)”

未捕获的引用错误:应用引导模板后未定义 $

捕获JS 错误日志