所以我使用以下方法检查了我的javascript:http://www.jslint.com/
如果我不在{}之间包装IF / FOR语句,我会得到“错误”,如下所示:
第152行第27个问题: 期待'{',而不是看到 '复位()'
或者如果我初始化FOR里面的变量:
第154行的问题第19条:移动 'var'声明到了顶部 功能
为什么这些被视为错误? 这些不应该被认为是好的做法,因为它们实际上减少了代码的大小,这对于javascript来说比代码的速度更重要吗?
答案 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 ++中也允许同样的希望遗漏大括号,这也是一个错误。
如果像我一样,你试图通过省略括号来保存几次击键,然后被你的错误咬伤并殴打,我保证你不会问这个问题:-)