如果jQuery未通过验证,JSLint有什么用处

时间:2009-02-02 22:33:54

标签: javascript jquery

所以我一直在探索清理和测试JavaScript的不同方法。我认为就像任何其他语言一样,改善的一种方法就是阅读好的代码。 jQuery非常受欢迎,所以它必须具有一定程度的良好编码。

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

  

错误:

     

第18行第5个问题:   期待一个标识符,而不是看到   'undefined'(保留字)。

     

未定义,

     

第24行第27个问题:   缺少分号。

     

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

     

第24行第28个问题:   期待一个标识符,而不是看到   '='。

     

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

     

第24行第28个问题:    停止,无法继续。 (0%   扫描)

这是使用JSLintjquery-1.3.1.js

完成的

9 个答案:

答案 0 :(得分:105)

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

上面输出中由JSLint标记的许多问题都是Crockford认为导致难以维护代码的问题,或者他认为这些问题导致他过去做了“聪明”的事情,这些事情很难维持。

有一些事情Crockford认为是我同意的错误,比如丢失的分号。删除分号会强制浏览器猜测插入语句结束标记的位置,这有时会很危险(它总是较慢)。其中一些错误与JSLint有关,而不是期望或支持jQuery在第24行上执行的多个赋值。

如果您对JSLint错误有疑问,请发送电子邮件给Crockford,他非常擅长回复,并且通过他的回复,您至少会知道为什么JSLint会以这种方式实现。

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

JSLint在识别代码问题方面非常有用,即使JQuery没有通过它所希望的标准。

答案 1 :(得分:9)

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

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

来自JSLint的描述:

  

JSLint接受JavaScript源并对其进行扫描。如果发现问题,则会返回描述问题的消息以及源中的大致位置。问题不一定是语法错误,尽管通常是这样。 JSLint着眼于一些样式约定以及结构问题。它并不能证明您的程序是正确的。它只是提供另一组眼睛来帮助发现问题。

     

JSLint定义了JavaScript的专业子集,这是一种比ECMAScript语言规范第3版定义的更严格的语言。该子集与JavaScript编程语言的代码约定中的建议相关。

答案 2 :(得分:7)

“jQuery非常受欢迎,因此它必须具有一定程度的良好编码。”

有人希望jQuery会出现这种情况,但不幸的是,事实并非如此。 jQuery非常有用且受欢迎,但它不是一个编写良好的JavaScript库。大卫马克最近在comp.lang.javascript中发表了一篇严厉批评jQuery的文章,该文章研究了大量jQuery中可怜代码的例子:

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

答案 3 :(得分:4)

如果你没有积极开发jQuery本身,为什么甚至可以在它上面运行JSLint呢?如果它有效,它可以工作,你不必担心它。

答案 4 :(得分:4)

jQuery开发人员的目标与您的目标不同。 jQuery专为速度和紧凑性而打造,实现这些目标不仅仅是可读性和可维护性。

Crockford在JSLint中的测试更多地与实现一些他觉得很舒服带回家去见他母亲的事情有关,如果你将在一段时间内与你的代码结婚,这是一个有效的问题。

答案 5 :(得分:3)

JsLint的目的在FAQ [1]中明确说明:

“JSLint定义了一个专业的JavaScript子集,一种比ECMAScript语言规范第3版定义的更严格的语言。该子集与JavaScript编程语言的代码约定中的推荐相关。”

现在,如果您感到困惑:ECMA3已经是当今任何JS解释器提供的JS功能的一个子集(有关JavasScript和ECMAScript版本之间关系的概述,请参阅[2])

回答“JSlint有什么用处”的问题:  *使用JsLint验证您正在使用Javascript的“安全”子集,这种子集非常不符合JS实现。  *使用Jslint验证您遵循crockford代码约定[4]

答案 6 :(得分:1)

我发现了一个JSLint非常非常有用的案例:当你抓住其中一个漂浮在'Net,然后是另一个,然后又是另一个的大屁股库时,你很快就会发现自己加载了50k的Javascript在每个新的页面加载(缓存可能会有所帮助,但它不是一个万能的解决方案)。

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

我找到的最好的是Dean Edward的;我用它来压缩John Fraser的Showdown(Markdown for Javascript库),但不幸的是,压缩破坏了代码。由于Showdown不再受支持,我必须自己更正 - 而JSlint对此非常宝贵。

简而言之,JSlint可用于为重型压缩准备JS代码。

答案 7 :(得分:-1)

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

答案 8 :(得分:-1)

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