我目前正在验证我对JSlint的JavaScript并取得进展,这有助于我编写更好的JavaScript - 特别是在使用JQuery Library。

我现在遇到 Jshint, ,叉 jslint.
因此,我想知道Web应用程序是驱动着JavaScript的Web应用程序,这是更好或最适用的验证工具,可以使用以下操作:

  • 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的Ultra Strict Strudet,这是合理的建议 - 我看到很少有可以通过JSLINT测试的JavaScript代码。但是,借助当今的Jshint和Eslint工具中可用的更务实的规则,试图通过零警告使您的代码通过它们是一个更现实的主张。

林格偶尔仍然可能会抱怨您有意做的事情 - 例如,您知道您应该始终使用 === 但是只有这一次,您有充分的理由使用 ==. 。但是即使那样,使用ESLINT,您仍可以选择指定 eslint-disable 在有关行周围,因此您仍然可以进行带有零警告的传递棉绒测试,其余的代码遵守规则。 (只是不要经常做这种事情!)


原始答案如下

一定要使用JSlint。但是,不要挂断结果并修复其警告的所有内容。它将帮助您改善代码,并帮助您找到潜在的错误,但并非JSLINT抱怨的所有内容都是一个真正的问题,因此不要觉得您必须使用零警告来完成该过程。

几乎所有具有显着长度或复杂性的JavaScript代码都会在JSlint中产生警告,无论其书写效果如何。如果您不相信我,请尝试通过它来运行一些流行的库。

一些JSLINT警告比其他警告更有价值:了解要注意的是哪些,哪些不那么重要。应考虑每个警告,但没有义务修复您的代码以清除任何给定的警告;看代码并确定您对此感到满意是完全可以的;有时候,JSlint不喜欢的事情实际上是正确的做法。

其他提示

TL;博士外卖:

如果您正在为自己或团队寻找非常高的标准,JSLINT。但是它不一定是标准,只是标准,其中一些是从一个名叫道格·克罗克福德(Doug Crockford)的JavaScript神来教条的。如果您想变得更加灵活,或者您的团队中有一些不喜欢JSlint的意见的老专业人士,或者定期在JS和其他C家族语言之间来回来回尝试,请尝试Jshint。

长版:

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

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

因此,我想这个想法是它是“社区驱动的”而不是克罗克福德驱动的。实际上,Jshint在一些风格和较小的句法“观点”上通常更宽松(或至少可配置或不可知论),JSLINT是一个粘性。

例如,如果您认为下面的A和B都可以,或者您想用B中无法使用的一个或多个方面编写代码,则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声明的仇恨 var i = 0 声明, ,以及某些用于功能声明的空格执行。

我认为JSlint执行的一些空格事物不一定是糟糕的,而是与家庭中其他语言(C,Java,Python等)的一些相当标准的Whitespace惯例不同步,它们通常是紧随其后的是JavaScript的惯例。由于我全天都用这些语言中的各种语言写作,并与不喜欢绒毛风格的团队成员合作,因此我发现Jshint是一个很好的平衡。它捕获了一种合法的错误或真正糟糕的形式,但并不像JSlint一样(有时以我无法禁用的方式)对我的风格观点或句法nitpicks吠叫。

许多好的库并不是lint的,对我来说,这表明某些JSlint只是在推动1个版本的“良好代码”(实际上是好代码)的想法有一些事实。但是话又说回来,相同的库(或其他好的库)可能也不暗示,因此,触摸。

有另一个 成熟并积极发展 JavaScript鳞片上的“播放器” - 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关闭编译器 (还有 闭合衬里)。您可以在线尝试 这里.

闭合编译器是使JavaScript下载和运行速度更快的工具。它是JavaScript的真正编译器。它没有从源语言到机器代码编译,而是从JavaScript编译到更好的JavaScript。它可以解析您的JavaScript,分析,删除死亡代码并重写并最小化剩下的内容。它还检查语法,变量引用和类型,并警告有关常见的JavaScript陷阱。

前言:好吧,那很快就升级了。但决定将其拉开。愿这个答案对您和其他读者有帮助。

I got a bit carried away here

代码提示

虽然JSLINT和JSHINT是使用的好工具,但多年来,我来欣赏我的朋友 @ugly_syntax 呼叫:

较小的设计空间.

这是一个一般原则,就像“禅宗和尚”,限制了人们必须做出的选择,人们可以更有生产力和创造力。

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

标准j.

更新:

流动 改善了很多。有了它,您可以将类型添加到JS中,将有助于您防止很多错误。但是,它也可能避免您的方式,例如,在连接未型JS时。试试看!

QuickStart / 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.

注意:类型检查与启发式学

我的朋友提到设计空间时 榆树 我鼓励您尝试使用该语言。

为什么? JS实际上是受LISP的启发,这是一种特殊的语言,恰好是 毫无疑问. 。语言,例如榆树或 纯净打字 功能编程语言。

输入限制您的自由,以便编译器能够在最终违反语言或您自己的程序规则时检查和指导您;无论您程序的大小(LOC)如何。

最近,我们有一个初级同事两次实现了一个反应界面:一次在榆树中,一旦进入React;看看我在说什么。

相比 Main.elm (键入)⇔ index.js (未经类型,没有测试)

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

最后一句话,

现实是JS 毫无疑问。我建议谁 打字编程 给你?

看到,对于JS,我们处于另一个领域:摆脱类型,我们可以轻松地表达出难以或不可能提供适当类型的东西(这肯定是一个优势)。

但是,如果没有类型,几乎没有任何检查,因此我们被迫引入测试和(较少扩展)代码样式。

我建议您看LISP(例如 clojurescript)灵感并投资于测试您的代码。读 替代方式 有一个主意。

和平。

好吧,我们可以包括JS文件本身顶部的所有绒毛设置,而不是进行手动覆盖设置

声明该文件中的所有全局var:

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

声明所有的覆盖设置,例如:

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

希望对你有帮助 :)

还有另一种积极发展的替代方案 - JSCS - JavaScript代码样式:

JSCS是用于编程执行您的样式指南的代码样式衬里。您可以使用150多个验证规则为项目详细配置JSC,包括JQUERY,AIRBNB,Google等流行风格指南的预设。

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

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

还有为受欢迎的编辑构建的插件和扩展名。

另请参阅:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top