如果jQuery失败validationJSLint有什么好处

所以我一直在探索不同的方法来清理和testing我的JavaScript。 我想像其他任何语言一样,变得更好的方法是阅读好的代码。 jQuery非常stream行,所以它必须具有一定的良好的编码。

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

错误:

第18行的问题5:预期标识符,而是看到“未定义”(一个保留字)。

不确定的,

第24行的问题27:缺less分号。

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

第24行字符28问题:预期标识符,而是看到“=”。

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

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

这是使用JSLint和jquery-1.3.1.js完成的

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

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

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

如果您有关于JSLint错误的问题,请发邮件给Crockford,他的回复非常好,在回复中,您至less知道为什么JSLint会以这种方式实现。

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

即使JQuery没有通过它所期望的标准,JSLint也可以帮助你识别代码的问题。

JSLint可以帮助你发现问题,这不是一个有效性的考验,或者是一种思维的替代。 jQuery是相当先进的,这使得这样的结果是可以理解的。 我的意思是第一个几行是速度黑客,难怪最僵化的JSparsing器会有一些错误。

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

来自JSLint的描述:

JSLint需要一个JavaScript源代码并对其进行扫描。 如果发现问题,则会返回描述问题的消息以及源内的大致位置。 这个问题不一定是一个语法错误,虽然它经常是。 JSLint着眼于一些风格习惯以及结构问题。 这并不能certificate你的程序是正确的。 它只是提供了另一个眼睛来帮助发现问题。

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

“jQuery非常stream行,所以它必须有一定的好的编码。”

人们希望这是jQuery的情况,但不幸的是,这不是真的。 jQuery是有用和stream行的,但它不是一个写得很好的JavaScript库。 David Mark最近在comp.lang.javascript上发表了对jQuery的严厉批评,这些批评检查了jQuery中很多糟糕代码的例子:

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

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

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

Crockford在JSLint中的testing更多的是为了实现一些他可以放心地带回家与母亲见面的事情,如果你将要结婚一段时间,这是一个值得关注的问题。

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

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

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

回答“JSlint有什么好处”的问题:*使用JsLint来validation您正在使用Javascript的“安全”子集,这是不可能打破跨JS实现的。 *使用Jslint来validation你是否遵循了crockford代码约定[4]

我发现了一个JSLint非常有用的例子:当你抓住一个围绕“networking”,另一个又一个的大型库时,你很快就会发现自己在每一个新的页面加载(caching可能有帮助,但这不是一个万能的解决scheme)。

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

我发现的最好的是Dean Edward的; 我用它来压缩约翰·弗雷泽的摊牌(一个Markdown的JavaScript库),但不幸的是,压缩打破了代码。 由于摊牌不再支持,我不得不自己纠正 – 而JSlint是非常宝贵的。

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

如果你喜欢jQuery允许的菊花链方法,你可能会喜欢YUI3。

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