2009-02-02 60 views
38

所以我一直在探索不同的方法来清理和测试我的JavaScript。我想像其他任何语言一样,变得更好的方法是阅读好的代码。 jQuery非常流行,因此它必须具有一定的良好编码。JSLint有什么好处,如果jQuery无法验证

那么,为什么当我通过JSLint的的验证运行的jQuery它给了我这个消息:

Error:

Problem at line 18 character 5: Expected an identifier and instead saw 'undefined' (a reserved word).

undefined,

Problem at line 24 character 27: Missing semicolon.

jQuery = window.jQuery = window.$ = function(selector, context) {

Problem at line 24 character 28: Expected an identifier and instead saw '='.

jQuery = window.jQuery = window.$ = function(selector, context) {

Problem at line 24 character 28: Stopping, unable to continue. (0% scanned).

这是使用JSLintjquery-1.3.1.js

+10

jQuery不是完全示例Javascript – singpolyma 2009-04-08 15:39:49

+2

我知道这是一个老问题,但jQuery现在使用jsLint:http://docs.jquery.com/JQuery_Core_Style_Guidelines – 2011-11-09 19:03:19

回答

104

的JSLint测试关于是什么让一个特定的人(道格拉斯·克罗克福德)意见好的JavaScript代码。克罗克福德非常好,但他的一些观点充其量只是肛门保留,如下划线规则,或使用增量/减量运算符。

在上面的输出中,JSLint标记的许多问题都是Crockford认为导致维护代码困难的问题,或者他认为导致他在过去可能会做出“聪明”的事情很难维护。

有一些事情克罗克福德认定为错误,我同意,虽然,就像丢失的分号事情。删除分号会迫使浏览器猜测在哪里插入语句结束标记,并且这有时会很危险(它总是比较慢)。这些错误中的一些与JSLint没有预料到或支持jQuery在第24行的多个任务相关。

如果您有关于JSLint错误的问题,请发邮件给Crockford,他非常擅长回复,并且在他的回复中,你至少会知道为什么JSLint是这样实现的。

哦,只是因为一个图书馆很受欢迎并不意味着它的代码是好的。 JQuery很受欢迎,因为它是一个相对快速,易于使用的库。它的实施效果很好,这在很多人中非常受欢迎。但是,你当然应该阅读更多的代码,我们都应该。

即使JQuery没有通过它所期望的标准,JSLint在识别代码问题上也会非常有帮助。

+5

所有点都很好用,并且很好的指出,流行的doesn不等于 – 2009-02-02 22:59:21

+3

JQery现在试图成为jslint兼容!看看这里 - > http://forum.jquery.com/topic/jquery-1-4-2-jslint-report – 2010-06-02 23:23:57

+0

Crockford不喜欢把if/for/while等语句放在一行上。他总是希望看到{}括号。任何人都可以澄清为什么这很重要? (可读性不是可接受的答案)。 – 2011-01-04 05:41:14

9

JSLint可以帮助您发现问题,它不是测试有效性或替代思维。 jQuery非常先进,这使得这个结果可以理解。我的意思是第一个几行是速度黑客,难怪最严格的js解析器会出现一些错误。

在任何情况下,流行代码是完全正确的代码甚至'好'的假设是有缺陷的。 JQuery代码很好,你可以从阅读中学到很多东西。你仍然应该通过JSLint来运行你的东西,因为很高兴听到你写的东西的另一个意见。

从JSLint的的描述:

JSLint takes a JavaScript source and scans it. If it finds a problem, it returns a message describing the problem and an approximate location within the source. The problem is not necessarily a syntax error, although it often is. JSLint looks at some style conventions as well as structural problems. It does not prove that your program is correct. It just provides another set of eyes to help spot problems.

JSLint defines a professional subset of JavaScript, a stricter language than that defined by Edition 3 of the ECMAScript Language Specification. The subset is related to recommendations found in Code Conventions for the JavaScript Programming Language.

4

如果你不积极开发jQuery的本身,为什么即使在它运行的JSLint呢?如果它有效,它就可以工作,而且你不必担心它。

4

jQuery开发人员的目标与您的目标不一样。 jQuery的构建速度和紧凑性,实现这些目标胜过可读性和可维护性。

Crockford在JSLint中的测试更多的是为了实现他愿意带回家与母亲见面的事情,如果您将要结婚一段时间,这是一个值得关注的问题。

3

的JSLint的目的显然是在FAQ [1]表示:

“的JSLint定义的JavaScript,比由ECMAScript的语言规范的第3版中定义的严格的语言的一个专业的子集的子集相关转换为JavaScript编程语言代码约定中的建议“。

现在,如果你感到困惑:ECMA3已经是任何的今天JS解释提供的JS功能的子集(见[2]使用JavasScript和ECMAScript版本之间的关系的概述)

要回答quesition“JSlint有什么好处”: *使用JsLint来验证您正在使用Javascript的“安全”子集,这对于打破跨JS实现而言是不可取的。 *使用JSLint的验证你跟着Crockford的编码约定[4]

7

“jQuery非常流行,因此它必须具有一定的良好编码。”

人们希望这是jQuery的情况,但不幸的是这不是真的。 jQuery是有用和流行的,但它不是一个写得很好的JavaScript库。大卫?马克最近发布的jQuery的严厉批判中comp.lang.javascript它检查了大量的代码很差的例子jQuery中发现:

http://groups.google.com/group/comp.lang.javascript/msg/37cb11852d7ca75c?hl=en&

1

我发现一个情况下的JSLint很,非常有用:当你抓住那些围绕'网络,另一个,又一个另一个'漂浮的大型库时,你很快就会发现自己在每次新的页面加载时加载50k的Javascript(缓存可能有帮助,但它不是一个治愈所有的解决方案)。

那你会怎么做?压缩这些库。但是你的主机不会对非html文件进行压缩!所以呢?你使用一个Javascript压缩器。

我发现的最好的是Dean Edward的;我用它来压缩John Fraser的Showdown(JavaScript库Markdown),但不幸的是,压缩破坏了代码。由于摊牌不再支持,我必须自己纠正 - 而JSlint对此非常重要。

简而言之,JSlint对准备用于重型压缩的JS代码很有用。

-1

如果你喜欢像jQuery这样的菊花链方法,你可能会喜欢YUI3。

-1

JQuery当然不是世界上最好的东西。当您查看符号时已经很清楚了。美元的括号组合对你的眼睛来说真的很糟糕。编程应该清晰和简单。 JQuery远非如此。这个理由对我来说不够用。它没有正确书写并不让我感到意外,只会强调我对这个JavaScript库的想法。