Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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_Jslint_Jshint - Fatal编程技术网

检查/验证javascript语法的简单方法

检查/验证javascript语法的简单方法,javascript,syntax,jslint,jshint,Javascript,Syntax,Jslint,Jshint,我有一些不同的javascript代码片段(几千个),其中一些在语法上有一些愚蠢的错误(比如大括号/引号不匹配、javascript中的HTML、变量名中的拼写错误) 我需要一个简单的方法来检查JS语法。我尝试过JSLint,但它发送了太多关于样式、变量定义方式等的警告(即使我关闭了所有标志)。我不需要找出样式问题,也不需要提高javascript质量,我只需要找到明显的语法错误。当然,我可以简单地在浏览器/浏览器控制台中进行检查,但我需要自动进行检查,因为代码片段的数量很大 添加: JSLin

我有一些不同的javascript代码片段(几千个),其中一些在语法上有一些愚蠢的错误(比如大括号/引号不匹配、javascript中的HTML、变量名中的拼写错误)

我需要一个简单的方法来检查JS语法。我尝试过JSLint,但它发送了太多关于样式、变量定义方式等的警告(即使我关闭了所有标志)。我不需要找出样式问题,也不需要提高javascript质量,我只需要找到明显的语法错误。当然,我可以简单地在浏览器/浏览器控制台中进行检查,但我需要自动进行检查,因为代码片段的数量很大

添加:
JSLint/JSHint报告了许多行中的问题,这些问题不是“漂亮”的,而是有效的(即有一些潜在的问题),并且看不到真正的问题,普通编译器只会报告语法错误并停止执行。例如,尝试JSLint该代码,它在第4行(不匹配的引号)、第6行(需要逗号)和第9行(意外)有语法错误

document.write('something');
a=0;
如果(window.location=='http://google.com')a=1;
写下(“aaa=”和“+a+”和“+eded”);
a={
某物:['a']
某物2:[a']
};
a=1;

您可以尝试,这样就不那么冗长了。

我发现SpiderMonkey能够编译脚本而不执行它,如果编译失败,它会打印错误

所以我刚刚为SpiderMonkey创建了一个小包装

sub checkjs {
    my $js = shift;
    my ( $js_fh, $js_tmpfile ) = File::Temp::tempfile( 'XXXXXXXXXXXX', EXLOCK => 0, UNLINK => 1, TMPDIR => 1 );
    $| = 1;
    print $js_fh $js;
    close $js_fh;
    return qx(js -C -f $js_tmpfile 2>&1);
}
javascriptlint.com在我的案例中也做得很好。(感谢@rajeshkakawat)。

语义设计(我的公司)JavaScript格式化程序读取JS文件并格式化它们。您不需要格式化部分

为了读取要格式化的文件,它使用一个完整的JavaScript解析器,该解析器执行完整的语法检查(甚至在正则表达式内部)。如果运行它并忽略格式化的结果,就会得到一个语法检查器


你可以给它一个大的文件列表,它会格式化所有的文件。你可以用它来批量检查你的大集合。(如果有任何语法错误,它将向shell返回非零错误状态)。

如果您有一个您想要捕获的JSLint错误的详尽列表,那么有很多选项

JSLint的代码实际上相当好,也相当容易理解(我假设您已经从您的问题中非常熟悉JavaScript)。你可以破解它,只检查你想要的,不管它发现多少错误,都可以继续


您还可以在Node.js中快速编写一些内容,按原样使用JSLint快速检查每个文件/片段,并仅输出您关心的错误。

以防有人仍在查看,您可以尝试


它只检查语法,其他什么都不检查。

看起来与JSLint非常相似。我认为问题在于,他不关心它是否可以编译(例如SpiderMonkey?当然它不需要您声明变量,对吧?),而是关心查找一些逻辑错误,尽管不是编译错误JSLint不适合语法检查,它报告了一些小问题,但没有看到真正糟糕和危险的东西。试试这个:document.write('something');a=0;if(window.location=')a=1;document.write(“aaa='andh”+a+“eded”);a={something:['a']something 2:['a'] };a=1;据我所知,SpiderMonkey是Firefox中使用的JS引擎,所以if会像Firefox那样添加/不添加分号。我不知道这是你自己的答案!编译不会在名称等方面发现拼写错误。创建一个与你想要报告的内容相匹配的JSLint子集,我认为这会给你一个你想要的答案nd也会报告缺失的分号,这可能导致多文件缩小代码。实际上,在我的案例中,JSLint错误报告有几兆字节的文本读取/修复,这将花费数年时间:)有些脚本依赖于第三方代码,因此很难理解某个变量是否因为打字错误而使用过一次,当然,因为它被宣布在其他地方。一般来说,我使用SpiderMonkey发现了几十个语法问题,我几乎对它感到满意。我还将尝试javascriptlint,可能会尝试过滤掉JSLint结果以忽略非关键问题(它将所有内容报告为“错误”):\)请参阅我的加载项初始帖子。试试这个hmmm。。。谢谢,我试试看。我以为这是JSLint的克隆,但它的工作原理不同。1)忘了说。平台为Linux,免费软件工具优先。2) 你的网站认为只有一个平台存在,很难找到你的软件在Windows1上运行。很难回答您最初没有提供的需求。2) 不难,请参见购买页面链接。3) 讨论在Linux上运行Wine下的软件,该软件运行得非常好。Esprima似乎比JsLint更有用,至少它检测到缺少的括号。但它不能与编辑器集成,是吗?
sub checkjs {
    my $js = shift;
    my ( $js_fh, $js_tmpfile ) = File::Temp::tempfile( 'XXXXXXXXXXXX', EXLOCK => 0, UNLINK => 1, TMPDIR => 1 );
    $| = 1;
    print $js_fh $js;
    close $js_fh;
    return qx(js -C -f $js_tmpfile 2>&1);
}