我应该使用JSLint还是JSHint JavaScript验证?[已关闭]TL;DR完整版

2022-08-29 23:14:37

我目前正在针对JSLint验证我的JavaScript并取得进展,它帮助我编写更好的JavaScript - 特别是在使用Jquery库方面。

我现在遇到了JSHintJSLint的一个分支。
因此,我想知道Web应用程序,这些应用程序在很大程度上是由JavaScript驱动的,这是更好或最适用的验证工具:

  • JSLint 还是 JSHint?

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

jshint和jslint之间的区别是什么?请在单个javascript示例中解释。

链接:

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

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


答案 1

TL;DR

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

如果你想更灵活一点,或者你的团队中有一些老专业人士不相信JSLint的观点,或者经常在JavaScript和其他C系列语言之间来回切换,请尝试JSHint。

完整版

两篇文章解释了为什么JSHint存在:

  1. JSHint:JSLint的社区驱动分支

  2. 为什么我把JSLint分叉到JSHint

JSLint背后的想法是,它是社区驱动的,而不是Crockford驱动的。JSHint通常对JSLint坚持的一些风格和次要的语法观点更宽容(或者至少是可配置的或不可知的)。

例如,如果您认为下面的 1.2. 都很好,或者您想用 1 中的一个或多个来编写代码s方面在2.中不可用,JSHint适合您。如果您认为 2. 是唯一正确的选项,请使用 JSLint。我相信还有其他差异,但这突出了一些。

  1. 将 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);
      }
    })();
    
  2. 同时传递 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-loop var i = 0声明的憎恨,以及函数声明的一些空格强制。

JSLint强制执行的一些空格并不一定是坏事,而是与家族中其他语言(C,Java,Python等)的一些非常标准的空格约定不同步,这些约定通常也作为Javascript中的约定遵循。由于我整天都在用各种这些语言编写,并且与不喜欢代码中Lint样式空格的团队成员一起工作,我发现JSHint是一个很好的平衡。它捕获了合法的错误和非常糟糕的代码,但不会像JSLint那样(有时,以我无法禁用的方式)对我咆哮,因为我不关心的风格意见或句法挑剔。

很多好的库都不是Lint'able的,这对我来说表明,JSLint的一些只是关于推送一个版本的“好代码”(这确实是好代码)的想法是有一定道理的。但话又说回来,相同的库(或其他好的库)可能也不是Hint able,所以,touché。


答案 2

[编辑]
此答案已被编辑。我将下面的原始答案留给上下文(否则评论就没有意义了)。

当最初提出这个问题时,JSLint是JavaScript的主要linting工具。JSHint是JSLint的一个新分支,但与原来的分支还没有太大的区别。

从那时起,JSLint几乎保持不变,而JSHint已经发生了很大的变化 - 它抛弃了许多JSLint更具对抗性的规则,增加了一大堆新规则,并且通常变得更加灵活。此外,现在还提供了另一个工具 ESLint,它更加灵活,并且具有更多规则选项。

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

对于2011年JSLint的超严格规则集,这是合理的建议 - 我见过很少的JavaScript代码集可以通过JSLint测试。然而,随着当今JSHint和ESLint工具中可用的更实用的规则,尝试让你的代码在零警告的情况下通过它们是一个更现实的命题。

可能偶尔也会有一些情况,一个linter会抱怨你故意做的事情 - 例如,你知道你应该总是使用,但只有这一次你有充分的理由使用。但即便如此,使用 ESLint,您也可以选择在相关行周围指定,这样您仍然可以在零警告的情况下通过 lint 测试,而代码的其余部分则遵守规则。(只是不要经常做那种事情!=====eslint-disable


[原文答案如下]

无论如何,请使用JSLint。但是不要纠结于结果和修复它警告的所有内容。它将帮助您改进代码,并帮助您找到潜在的错误,但并不是JSLint抱怨的所有内容都是一个真正的问题,所以不要觉得你必须在零警告的情况下完成这个过程。

几乎任何具有显着长度或复杂性的Javascript代码都会在JSLint中产生警告,无论它写得多么好。如果你不相信我,试着通过它运行一些流行的库,比如JQuery。

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