我应该使用JSLint还是JSHint JavaScript验证?[关闭]

2020/09/26 23:21 · javascript ·  · 0评论

我目前正在针对JSLint验证我的JavaScript并取得进展,它正在帮助我编写更好的JavaScript,尤其是在使用Jquery库时。

现在我所遇到JSHint,一个叉的JSLint

因此,我想知道对于Web应用程序来说,很大程度上是JavaScript驱动的,它是可用于以下工作的更好或最适用的验证工具:

  • JSLint还是JSHint?

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

和jshint和jslint之间的区别?请在单个javascript示例中说明。

链接:

  1. jshint - http://www.jshint.com/

  2. jslint - http://jslint.com/

[编辑]

此答案已被编辑。
我将下面的原始答案留给上下文(否则,注释将无意义)。

最初提出此问题时,JSLint是JavaScript的主要整理工具。JSHint是JSLint的新分支,但尚未与原始版本相去甚远。

从那时起,JSLint几乎保持静态,而JSHint进行了很大的更改-它抛弃了JSLint的许多对立规则,增加了新规则的整体负载,并且通常变得更加灵活。此外,现在还提供了另一个工具ESLint,它更加灵活并且具有更多规则选项。

在我最初的回答中,我说过您不应该强迫自己遵守JSLint的规则;只要您了解它为什么会发出警告,就可以自己判断是否更改代码以解决警告。

从2011年开始实施JSLint的超严格规则集,这是合理的建议-我见过很少有JavaScript代码集可以通过JSLint测试。但是,利用当今的JSHint和ESLint工具中可用的更为实用的规则,尝试使您的代码以零警告通过它们是更现实的主张。

有时候,棉短绒有时仍会抱怨您故意做的事情-例如,您知道应该始终使用,===但只有这一次您才有充分的理由使用==但是即使那样,使用ESLint,您也可以选择eslint-disable在有问题的行周围进行指定,这样您仍然可以通过带有零警告的lint测试,其余代码则遵循该规则。(只是不要经常做这种事情!)


[原始答复如下]

一定要使用JSLint。但是不要挂在结果上,也不去解决它警告的所有问题。这将帮助您改进代码,并帮助您查找潜在的错误,但并非JSLint抱怨的所有问题都成为一个真正的问题,因此不必觉得您必须以零警告完成该过程。

无论编写得多么好,几乎任何长度或复杂程度都很高的Javascript代码都会在JSLint中产生警告。如果您不相信我,请尝试通过它运行一些流行的库,例如JQuery。

一些JSLint警告比其他警告更有价值:了解要注意的警告和不那么重要的警告。应该考虑每一个警告,但不要认为必须修正您的代码以清除任何给定的警告。查看代码并决定对它满意是完全可以的;有时候,JSlint不喜欢的事情实际上是正确的事情。

tl; dr外卖

如果您正在为自己或团队寻求一个很高的标准,请使用JSLint。但这不一定是THE标准,而仅仅是A标准,其中一些标准是由一个叫Doug Crockford的Java语言神学的。如果您想变得更加灵活,或者您的团队中有一些老专业人士不接受JSLint的意见,或者定期在JS和其他C系列语言之间来回走动,请尝试JSHint。

长版

分叉背后的原因很好地解释了为什么JSHint存在:

http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to -jshint /

因此,我想这是“社区驱动”而不是克罗克福德驱动。实际上,在一些JSLint坚持的风格和次要语法“观点”上,JSHint通常比较宽容(或至少可配置或不可知)。

举例来说,如果您认为下面的A和B都很好,或者您想使用B中没有的A的一个或多个方面编写代码,则JSHint适合您。如果您认为B是唯一正确的选择,请使用JSLint。我敢肯定还有其他差异,但这突出了一些。

A)开箱即用地传递JSHint-JSLint失败

(function() {
  "use strict";
  var x=0, y=2;
  function add(val1, val2){
    return val1 + val2;
  }
  var z;
  for (var i=0; i<2; i++){
    z = add(y, x+i);
  }
})();

B)同时通过JSHint和JSLint

(function () {
    "use strict";
    var x = 0, y = 2, i, z;
    function add(val1, val2) {
       return val1 + val2;
    }
    for (i = 0; i < 2; i += 1) {
        z = add(y, x + i);
    }
}());

我个人觉得JSLint代码非常好看,而我唯一不同的硬功能是它讨厌函数中的多个var声明和for循环var i = 0声明,以及对函数声明的某些空白实施。

我发现JSLint强制执行的一些空白操作不一定很糟糕,但是与该系列中其他语言(C,Java,Python等)的一些相当标准的空白约定不同步。也遵循Javascript中的约定。由于我整天都在使用多种语言来编写文字,并且与不喜欢Lint样式的空白的团队成员一起工作,因此我发现JSHint是一个很好的平衡点。它捕获的东西是合法的错误或形式很糟糕,但不会像JSLint那样(有时,以我无法禁用的方式)对我不屑一顾,而对我不关心的样式意见或语法缺陷。

许多好的库不是Lint'able的,对我来说,这表明某些JSLint只是推送1版“好的代码”(实际上是好的代码)是有道理的。但是再说一次,同样的库(或其他好的库)也可能不可用,因此,touché。

在javascript linting前端还有一个成熟且积极开发的 “播放器”- ESLint

ESLint是用于识别和报告ECMAScript / JavaScript代码中的模式的工具。在许多方面,它与JSLint和JSHint相似,但有一些例外:

  • ESLint使用Esprima进行JavaScript解析。
  • ESLint使用AST评估代码中的模式。
  • ESLint完全可插入,每个规则都是一个插件,您可以在运行时添加更多内容。

真正重要的是它可以通过自定义插件/规则扩展已经有多个针对不同目的编写的插件。其他外,还有:

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

几周前我遇到了同样的问题,并且正在评估JSLint和JSHint。

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

一定要使用JSLint。

要么:

如果您正在为自己或团队寻求一个很高的标准,请使用JSLint。

因为您可以在JSHint中配置与在JSLint中几乎相同的规则。因此,我认为可以实现的规则并没有太大差异。

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

由于以下原因,我们最终决定选择JSHint:

  • 似乎比JSLint更可配置。
  • 看起来绝对是由社区推动,而不是单人表演(无论《男人》有多酷)。
  • JSHint比我们的JSLint更适合我们的代码风格OOTB。

我会提出第三个建议,即Google Closure编译器(以及Closure Linter)。您可以在此处在线尝试

Closure Compiler是使JavaScript下载和运行速度更快的工具。这是一个真正的JavaScript编译器。它不是从源语言编译为机器代码,而是从JavaScript编译为更好的JavaScript。它解析您的JavaScript,对其进行分析,删除无效代码,然后重写并最大程度地减少剩余内容。它还会检查语法,变量引用和类型,并警告常见的JavaScript陷阱。

前言:嗯,那很快就升级了。但是决定要坚持下去。希望这个答案对您和其他读者有帮助。

我有点被这里带走

代码提示

尽管JSLint和JSHint是很好的工具,但多年来,我逐渐欣赏了我的朋友@ugly_syntax所说的:

设计空间较小

这是一个总的原则,很像“和尚”,它限制了人们必须做出的选择,从而可以提高生产力和创造力。

因此,我目前最喜欢的零配置JS代码样式:

StandardJS

更新

流量改善了很多。有了它,您可以使用JS添加类型,这将帮助您防止很多错误。但是它也可能会妨碍您的操作,例如在连接无类型JS时。试试看!

快速入门/ TL; DR

添加standard为项目的依赖项

npm install --save standard

然后在中package.json,添加以下测试脚本:

"scripts": {
    "test": "node_modules/.bin/standard && echo put further tests here"
},

在开发过程中获得时髦的输出,而npm install --global snazzy不是运行它npm test

注意:类型检查与启发式

我的朋友在提到设计空间时提到Elm,我鼓励您尝试一下该语言。

为什么?JS实际上是受LISP启发的,LISP是一类特殊的语言,碰巧是未类型化的诸如Elm或Purescript之类的语言类型化的功能编程语言。

类型限制了您的自由,以便编译器在最终违反语言或您自己的程序规则时能够检查并指导您;不管程序的大小(LOC)。

最近,我们有一个初级同事实现了一个响应式接口两次:一次是在Elm中,一次是在React中;看一下我在说什么。

比较Main.elm(输入)⇔ index.js(未输入,无测试)

(请注意,React代码不是惯用的,可以改进)

最后一句话,

现实是JS 无类型的。我应该向谁建议打字编程

看到,使用JS,我们处在不同的领域:从类型中解放出来,我们可以轻松地表达很难或不可能赋予适当类型的东西(这无疑是一个优势)。

但是,如果没有类型,则几乎无法控制程序,因此我们被迫引入测试和(较小程度地扩展)代码样式。

我建议您看一下LISP(例如ClojureScript)以获得灵感,并投资于测试代码。阅读子堆栈的方法以获取想法。

和平。

好吧,除了进行手动棉绒设置外,我们还可以在我们的JS文件本身的顶部包括所有棉绒设置,例如

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

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

声明所有的皮棉设置,例如:

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

希望这个能对您有所帮助 :)

还有另一个积极开发的替代方法-JSCS — JavaScript代码样式

JSCS是用于以编程方式强制执行样式指南的代码样式库。您可以使用150多种验证规则为项目详细配置JSCS,其中包括来自流行样式指南(如jQuery,Airbnb,Google等)的预设。

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

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

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

另请参阅:

本文地址:http://javascript.askforanswer.com/woyinggaishiyongjslinthuanshijshint-javascriptyanzhengguanbi.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!