代码之家  ›  专栏  ›  技术社区  ›  Bobby Borszich

如果jQuery未能通过验证[closed],那么JSLint有什么好处

  •  39
  • Bobby Borszich  · 技术社区  · 17 年前

    所以我一直在探索不同的方法来清理和测试我的JavaScript。我想,就像其他语言一样,提高语言水平的一个方法就是阅读好的代码。jQuery非常流行,因此它必须具有一定程度的良好编码。

    那么,为什么当我通过JSLint的验证运行jQuery时,它会给我以下消息:

    错误:

    第18行的问题字符5: 应为标识符,而不是saw “未定义”(保留字)。

    第24行的问题字符27:

    jQuery=window.jQuery=window.$= 函数(选择器、上下文){

    第24行的问题字符28: 应为标识符,而不是saw '='.

    jQuery=window.jQuery=window.$= 函数(选择器、上下文){

    第24行的问题字符28: 扫描)

    这是通过使用 JSLint jquery-1.3.1.js

    9 回复  |  直到 17 年前
        1
  •  105
  •   foxxtrot    15 年前

    JSLint测试一个人(Douglas Crockford)关于什么是好的JavaScript代码的观点。Crockford很好,但他的一些观点充其量只是保留性的,比如下划线规则,或者使用递增/递减运算符。

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

    不过,我同意Crockford将某些东西识别为错误,比如缺少分号的事情。删除分号会迫使浏览器猜测在何处插入语句结尾标记,这有时可能很危险(总是比较慢)。其中有几个错误与JSLint不期望或不支持多个赋值有关,就像jQuery在第24行所做的那样。

    如果您有关于JSLint错误的问题,请发电子邮件给Crockford,他非常善于回答,通过他的回答,您至少可以知道为什么JSLint是以这种方式实现的。

    JSLint可以非常有助于识别代码中的问题,即使JQuery没有通过它所期望的标准。

        2
  •  9
  •   Community Mohan Dere    6 年前

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

    无论如何,流行代码是完全正确的代码甚至是“好”的假设是有缺陷的。JQuery代码很好,您可以通过阅读它学到很多东西。你仍然应该在JSLint中运行你的东西,如果只是因为听到关于你所写内容的另一种意见是件好事的话。

    JSLint获取一个JavaScript源代码并对其进行扫描。如果发现问题,它将返回一条消息,描述问题和源中的大致位置。问题不一定是语法错误,尽管经常是这样。JSLint研究了一些样式约定以及结构问题。它不能证明你的程序是正确的。它只是提供了另一组眼睛来帮助发现问题。

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

        3
  •  7
  •   vsedach    17 年前

    人们希望jQuery就是这样,但不幸的是,这不是真的。jQuery很有用,也很流行,但它不是一个编写良好的JavaScript库。David Mark最近在comp.lang.javascript中发表了一篇对jQuery的严厉批评,其中分析了大量jQuery中糟糕代码的例子:

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

        4
  •  4
  •   nickf    17 年前

    如果您没有积极地开发jQuery本身,为什么还要对其运行JSLint呢?如果它起作用,它就起作用,你不必担心它。

        5
  •  4
  •   Prestaul    17 年前

    Crockford在JSLint中的测试更多地是为了实现一些他会感到舒服的东西,带回家见他的母亲,如果你将与你的代码结婚一段时间,这是一个值得关注的问题。

        6
  •  3
  •   oberhamsi    17 年前

    常见问题[1]中明确说明了JsLint的目的:

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

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

    回答“JSlint有什么好处”的问题: *使用JsLint验证您使用的是Javascript的“安全”子集,该子集不可能破坏accross JS实现。 *使用Jslint验证您是否遵循了crockford代码约定[4]

        7
  •  1
  •   Mitch 74    16 年前

    我发现了一个JSLint非常非常有用的例子:当你抓取一个漂浮在“网络”上的大屁股库,然后抓取另一个,然后再抓取另一个,你很快就会发现自己在每一个新页面加载上加载50k的Javascript(缓存可能会有帮助,但它不是一个万灵丹解决方案)。

    我发现最好的是迪安·爱德华的;我用它来压缩JohnFraser的决战(Javascript库的降价),但不幸的是,压缩破坏了代码。由于决战不再受支持,我不得不自己纠正它——JSlint为此提供了无价的帮助。

    简而言之,JSlint对于准备JS代码进行重载压缩非常有用。

        8
  •  -1
  •   Marco Mariani    16 年前

        9
  •  -1
  •   mike    15 年前