JSLint代码质量工具

时间:2011-05-01 16:35:36

标签: javascript jquery jslint

所以我使用以下方法检查了我的javascript:http://www.jslint.com/

如果我不在{}之间包装IF / FOR语句,我会得到“错误”,如下所示:

  

第152行第27个问题:   期待'{',而不是看到   '复位()'

或者如果我初始化FOR里面的变量:

  

第154行的问题第19条:移动   'var'声明到了顶部   功能

为什么这些被视为错误? 这些不应该被认为是好的做法,因为它们实际上减少了代码的大小,这对于javascript来说比代码的速度更重要吗?

6 个答案:

答案 0 :(得分:10)

对于if语句错误,缺少开括号被认为是不好的做法,因为它会导致更难的维护。例如,如果您想在if语句中添加另一个语句,那么最终还是需要添加大括号,因此只需将维护包含在第一位就可以使维护更容易。

第二个错误,我发现有点......自以为是,因为我个人更喜欢将变量声明到更接近它们的位置,而不是在函数的顶部。

就个人而言,我最近喜欢使用JSHint,因为Crockfords Lint我发现不太正确的代码,更多关于Crockfords对JavaScript应该是什么样子的看法,其他人的意见都被诅咒。

答案 1 :(得分:4)

JSLint建议你将if和for语句包装在大括号中,因为如果你不小心缩进,它可能导致难以追踪错误。例如:

if (somecondition)
    step1();
    step2();

从缩进开始,看起来step1()和step2()只有在某些条件为真时才会执行,但实际上step2()会一直运行,因为大括号丢失了。

如果你真的关心文件大小,我建议你研究一下像yuicompressor这样的JS压缩器。其中大多数将删除if / for不需要它们的语句。然后,您可以充分利用这两个方面:可读代码和服务时的小文件大小。

答案 2 :(得分:3)

尊重第二个问题,JSlint推荐它,因为javascript变量总是功能范围,而不是块范围。这样做:

function func(){
  var i;
  alert('foo');
  for(i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

完全(100%完全!!)与:

相同
function func(){
  alert('foo');
  for(var i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

因此i不适用于范围(与其他语言一样)。这就是为什么jslint建议将所有变量放在函数之上的原因,所以你不要觉得存在块范围变量。

尊重第一期,我同意你的看法。我不认为这是一个大问题。但是JSLint认为这是一个问题,因为如果你以后在你的if语句中添加行而忘记放置花括号,你就会有一个逻辑错误,正如杰夫指出的那样。

在:

if (x > 10)
    alert("it's obvious x is positive");

对代码进行一些更改后:

if (x > 10)
    alert("it's obvious x is positive");  
    alert("x is greater than 10");  //Logic error

使用花括号不会发生的问题。

答案 3 :(得分:1)

JSLint是一个代码 quality 工具,旨在减少错误的数量。你知道你只能在if循环中编写一个语句,而不需要用大括号包装它,但那个人不会。如果你有一天意外地做了怎么办?

在开发过程中减少文件大小几乎是不必要的,这就是缩放器的用途。在开发过程中,您需要使代码有效并且有意义。

函数顶部的变量是编码样式的讨论,你可以在选项中关闭它的通知。

无论如何,只要忽略你不关心的错误。

答案 4 :(得分:0)

第一件事,if语句上的括号反映了JSLint作者的信念,即省略括号会导致维护问题(我碰巧分享的信念,但这既不存在也不存在)。

第二件事实际上是特定于语言的:将var放在范围顶部(函数或全局)以外的任何地方实际上会误导任何读取代码的人,因为无论你把它放在哪里,它就好像它位于范围的顶部。详情:Poor, misunderstood var

答案 5 :(得分:0)

你问:“为什么这些被认为是错误?”他们不仅仅是糟糕的做法;他们是恶意的。那是因为他们鼓励以后几乎无法找到的错误。在C和C ++中也允许同样的希望遗漏大括号,这也是一个错误。

如果像我一样,你试图通过省略括号来保存几次击键,然后被你的错误咬伤并殴打,我保证你不会问这个问题:-)