8

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

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

补充:
JSLint/JSHint 报告了很多不是'美'但工作的行中的问题(即有一些潜在的问题),并且看不到真正的问题,正常的编译器会简单地报告语法错误并停止执行. 例如,尝试 JSLint 代码,该代码在第 4 行(不匹配的引号)、第 6 行(需要逗号)和第 9 行(意外的 <script>)有语法错误。

document.write('something');
a = 0;
if (window.location == 'http://google.com')  a = 1;
document.write("aaa='andh"+a+"eded"');
a = {
  something: ['a']
  something2: ['a']
};
<script>
a = 1;
4

6 回答 6

2

您可以尝试JSHint,它不那么冗长。

于 2013-03-28T10:54:44.747 回答
2

万一有人还在找你可以试试Esprima ,

它只检查语法,没有别的。

于 2017-05-11T18:52:42.003 回答
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)。

于 2013-03-28T14:32:39.327 回答
0

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

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

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

于 2013-03-28T20:59:42.817 回答
0

只需使用node --check filename

于 2021-12-05T12:34:01.813 回答
-1

Semantic Designs(我的公司)的 JavaScript 格式化程序读取 JS 文件并格式化它们。你不想要格式化部分。

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

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

于 2013-03-28T14:42:19.463 回答