我目前正在验证我的JavaScript对JSLint和取得进展,它正在帮助我写更好的JavaScript -特别是在与Jquery库工作。

我现在遇到了JSHint, JSLint的一个分支。 所以我想知道,对于JavaScript驱动的web应用程序,哪个是更好或最适用的验证工具:

JSLint还是JSHint?

我现在想要确定一种验证机制,并将其用于客户端验证。

和jshint和jslint的区别?请用javascript实例解释。

链接:

金信- http://www.jshint.com/ JSLINT- http://jslint.com/


当前回答

在javascript检测方面,还有另一个成熟且积极开发的“播放器”——ESLint:

ESLint是一个用于识别和报告中发现的模式的工具 ECMAScript / JavaScript代码。在许多方面,它类似于JSLint和 JSHint有几个例外: ESLint使用Esprima进行JavaScript解析。 ESLint使用AST来计算代码中的模式。 ESLint是完全可插入的 单个规则是一个插件,你可以在运行时添加更多的规则。

这里真正重要的是它可以通过自定义插件/规则进行扩展。已经为不同的目的编写了多个插件。其中包括:

eslint-plugin-angular(强制执行John Papa的Angular风格指南中的一些指导方针) eslint-plugin-jasmine eslint-plugin-backbone

当然,你也可以使用你选择的构建工具来运行ESLint:

咕噜咕噜咕噜 古尔普-埃斯林特

其他回答

还有另一个正在开发的替代方案- JSCS - JavaScript代码风格:

JSCS是一种代码风格检测器,用于以编程方式强制执行您的风格 指南。您可以使用over为您的项目详细配置JSCS 150条验证规则,包括流行风格指南中的预设 jQuery, Airbnb,谷歌等。

它带有多个预设,您可以通过简单地在.jscsrc配置文件中指定预设并自定义它-覆盖,启用或禁用任何规则来进行选择:

{
    "preset": "jquery",
    "requireCurlyBraces": null
}

还有为流行编辑器构建的插件和扩展。

还看到:

完美的代码,零努力

在javascript检测方面,还有另一个成熟且积极开发的“播放器”——ESLint:

ESLint是一个用于识别和报告中发现的模式的工具 ECMAScript / JavaScript代码。在许多方面,它类似于JSLint和 JSHint有几个例外: ESLint使用Esprima进行JavaScript解析。 ESLint使用AST来计算代码中的模式。 ESLint是完全可插入的 单个规则是一个插件,你可以在运行时添加更多的规则。

这里真正重要的是它可以通过自定义插件/规则进行扩展。已经为不同的目的编写了多个插件。其中包括:

eslint-plugin-angular(强制执行John Papa的Angular风格指南中的一些指导方针) eslint-plugin-jasmine eslint-plugin-backbone

当然,你也可以使用你选择的构建工具来运行ESLint:

咕噜咕噜咕噜 古尔普-埃斯林特

几个星期前我也有同样的问题,当时我正在评估JSLint和JSHint。

与这个问题的答案相反,我的结论不是:

务必使用JSLint。

Or:

如果您正在为自己或团队寻找一个非常高的标准,JSLint。

因为你可以在JSHint和JSLint中配置几乎相同的规则。所以我认为你所能实现的规则并没有太大的不同。

因此,选择一个而不是另一个的原因更多是政治上的,而不是技术上的。

我们最终决定使用JSHint,原因如下:

似乎比JSLint更可配置。 看起来更像是社区驱动的,而不是一个人的表演(不管这个男人有多酷)。 JSHint比JSLint更符合我们的代码风格OOTB。

好吧,而不是做手动lint设置,我们可以包括所有的lint设置在我们的JS文件本身的顶部。

在该文件中声明所有的全局变量,如下所示:

/*global require,dojo,dojoConfig,alert */

像这样声明所有的lint设置:

/*jslint browser:true,sloppy:true,nomen:true,unparam:true,plusplus:true,indent:4 */

希望这对你有帮助:)

博士TL;

如果您正在为自己或您的团队寻找一个非常高的标准,请使用JSLint,但请记住,它不一定是标准,只是一个标准,其中一些标准教条地来自Doug Crockford。

如果您想要更灵活一点,或者您的团队中有一些老专家不接受JSLint的观点,或者经常在JavaScript和其他c家族语言之间来回切换,请尝试JSHint。

完整版

有两篇文章解释了JSHint存在的原因:

JSHint: JSLint的一个社区驱动的分支 为什么我把JSLint分叉到JSHint

JSLint背后的理念是它是社区驱动的,而不是crockford驱动的。JSHint通常对JSLint坚持的一些风格和次要语法意见更宽容(或者至少是可配置的或不确定的)。

例如,如果你认为两者都是1。和2。下面是很好的,或者如果你想用1中的一个或多个来编写代码。在2中没有的方面。, JSHint是给你的。如果你认为2。是唯一正确的选择,使用JSLint。我相信还有其他不同之处,但这里突出了一些。

从盒子里传递JSHint - JSLint失败 (函数(){ “使用严格的”; Var x=0, y=2; 函数add(val1, val2){ 返回val1 + val2; } var z; For (var i=0;我< 2;我+ +){ Z = add(y, x+i); } }) (); 同时传递JSHint和JSLint (函数(){ “使用严格的”; Var x = 0, y = 2, i, z; 函数add(val1, val2) { 返回val1 + val2; } For (i = 0;I < 2;I += 1) { Z = add(y, x + i); } } ());

我发现JSLint代码在视觉上更吸引人。我唯一不同意的特性是它讨厌在一个函数中声明多个var,讨厌for-loop var I = 0声明,以及对函数声明的一些空格强制。

A few of the whitespace things that JSLint enforces are not necessarily bad but are just out of sync with some pretty standard whitespace conventions for other languages in the family (C, Java, Python, etc.) often followed as conventions in Javascript as well. Since I'm writing in various of these languages throughout the day and working with team members who don't like Lint-style whitespace in our code, I find JSHint to be a good balance. It catches legitimate bugs and very badly formed code, but doesn't bark at me like JSLint does (sometimes, in ways I can't disable) for the stylistic opinions or syntactic nitpicks that I don't care for.

很多好的库都不能使用Lint,这对我来说证明了JSLint只是推出一个版本的“好代码”(这确实是好代码)的想法是有道理的。但是,同样的库(或其他好的库)可能也不具备Hint'able,因此,touché。