Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以通过编程捕获JavaScript语法错误?_Javascript_Syntax_Error Handling - Fatal编程技术网

是否可以通过编程捕获JavaScript语法错误?

是否可以通过编程捕获JavaScript语法错误?,javascript,syntax,error-handling,Javascript,Syntax,Error Handling,我不认为这是可行的,但我想把它扔给社区来证实我的怀疑 假设您正在用另一种语言(如Python、PHP或ASP)编写程序。该程序旨在构建另一个用JavaScript编写的程序。然而,不幸的是,第一个程序不能避免错误。因此,偶尔,构建JavaScript程序的程序会做一些古怪的事情,并在JavaScript源代码中输出语法错误。现在,一些用户去加载程序,程序实际上停止了,因为运行它的web浏览器无法正确解析JavaScript。这个用户可能不会高兴。我不会的 这就引出了我的问题。是否有可能编写一个错

我不认为这是可行的,但我想把它扔给社区来证实我的怀疑

假设您正在用另一种语言(如Python、PHP或ASP)编写程序。该程序旨在构建另一个用JavaScript编写的程序。然而,不幸的是,第一个程序不能避免错误。因此,偶尔,构建JavaScript程序的程序会做一些古怪的事情,并在JavaScript源代码中输出语法错误。现在,一些用户去加载程序,程序实际上停止了,因为运行它的web浏览器无法正确解析JavaScript。这个用户可能不会高兴。我不会的

这就引出了我的问题。是否有可能编写一个错误处理程序来捕获此类语法问题,从而允许应用程序正常地失败

下面是一个例子:

    <html>
  <head>
   <script type="text/javascript" charset="utf-8">
    window.onerror = errorHandler;
    function errorHandler(a,b,c) {
     alert('horray!  No wait, Booo!');
    }
    vara jfs;
   </script>
  </head>
  <body>
   Can this be done?
  </body>
 </html>

window.onerror=errorHandler;
函数errorHandler(a、b、c){
警惕('horray!不,等等,Booo!');
}
瓦拉jfs;
这能做到吗?


试一试{
瓦拉jfs;
}捕获(e){
警惕('horray!不,等等,Booo!');
}
这能做到吗?
谷歌发布了他们的浏览器,其中包括一个JavaScript编译器和最小化程序。我没有亲自使用过它,但听过很多很棒的东西。此外,它显然可以帮助您定位浏览器兼容性问题

我不认为它能帮助你进行实时分析,但它仍然可能是一个有价值的工具。

谷歌发布了他们的软件,其中包括一个JavaScript编译器和最小化工具。我没有亲自使用过它,但听过很多很棒的东西。此外,它显然可以帮助您定位浏览器兼容性问题


我认为它不会帮助您执行实时分析,但仍然可能是一个有价值的工具。

如果您对安全暴露感到满意,您可以对相关代码调用
eval()
,以检测语法错误

function say(x) { ... emit message in some way.... }

var scriptlets = [
    "foof1 = function(a) {if (a == 7) { return \"A-OK\"; } } ",
    "foof2 = function (a) {if argle bargle seventy 7, then this isn't going to work}"
];

function verifyScriptlet(n) {
    var s = scriptlets[n];
    try {
        var x = eval(s);
        say("verified #"+ n +", result: " + (typeof x));
    }
    catch (exc1)
    {
        say("Exception while verifying #"+ n +": " + exc1.message);
    }
}

verifyScriptlet(0);
verifyScriptlet(1);

如果您对安全性暴露感到满意,可以对相关代码调用
eval()
,以检测语法错误

function say(x) { ... emit message in some way.... }

var scriptlets = [
    "foof1 = function(a) {if (a == 7) { return \"A-OK\"; } } ",
    "foof2 = function (a) {if argle bargle seventy 7, then this isn't going to work}"
];

function verifyScriptlet(n) {
    var s = scriptlets[n];
    try {
        var x = eval(s);
        say("verified #"+ n +", result: " + (typeof x));
    }
    catch (exc1)
    {
        say("Exception while verifying #"+ n +": " + exc1.message);
    }
}

verifyScriptlet(0);
verifyScriptlet(1);

通常,对编程语言进行解析,如果解析成功,则可能编译为另一种形式,如果解析成功,则在硬件或vm上解释/执行。仅仅因为代码经过一个阶段,并不意味着它是有效的代码

您正在询问在最后一个阶段运行的代码是否能够意识到在第一部分中遇到的问题并加以处理

一些语言提供了各种钩子来连接它自己的解析和编译机制。如前所述,
eval
是Javascript调用此机制的方式

与其将所有脚本包装成字符串,不如将它们保存在javascript文件中,并使用以下javascript(或类似代码)将它们加载到主程序中


通常,对编程语言进行解析,如果解析成功,则可能编译为另一种形式,如果解析成功,则在硬件或vm上解释/执行。仅仅因为代码经过一个阶段,并不意味着它是有效的代码

您正在询问在最后一个阶段运行的代码是否能够意识到在第一部分中遇到的问题并加以处理

一些语言提供了各种钩子来连接它自己的解析和编译机制。如前所述,
eval
是Javascript调用此机制的方式

与其将所有脚本包装成字符串,不如将它们保存在javascript文件中,并使用以下javascript(或类似代码)将它们加载到主程序中


我对这个项目中使用的答案非常感兴趣:我对这个项目中使用的答案非常感兴趣:有趣。虽然我对安全暴露不是特别满意,但这绝对是一条路要走。有意思。虽然我对安全暴露不是特别满意,但这绝对是一条路要走。这是我的观点。
 function load(file){
    var client = new XMLHttpRequest();
    client.open("GET", file, false);
    client.send(null);
    return client.responseText;
  }

  function include(file){
    try {
      eval(load(file));
    } catch (e) {
       alert("problem with file " + file);
    }
  }