我应该担心JSLint中的“缺少分号”吗?

时间:2010-12-10 06:22:38

标签: javascript ajax

我有以下内容:

$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript")},cache:false});

JSLint告诉我:“第1行的问题83:缺少分号”

你同意吗?我添加了它,但是当我使用YUI Compressor时它会删除它吗?

由于

5 个答案:

答案 0 :(得分:5)

  

JSLint会伤害你的感情。

- Douglas Crockford

并且在90%的情况下它不做什么,它可能会抱怨丢失的分号,但代码仍然可以正常工作,因为技术上不需要在该位置,因此YUI压缩器将其删除以保存字节。 / p>

答案 1 :(得分:4)

JSLint尝试检测潜在的错误,就像警告标志一样。因此,它应该用在工作代码非压缩代码上。

答案 2 :(得分:3)

压缩器将其删除以节省发送的字节数(较小的文件大小/更快下载)。

可选的分号可能是导致问题的原因,例如

function a() {

   return // <-- semi colon is inserted here, terminating the line.
     {
         abc: '???'
     }
}

alert(a()); // undefined

我总是明确添加我的半冒号,然后BSD KNF style indenting

不要担心压缩器会做什么 - 如果你的代码运行良好,那就很好了。

更新

Pst在评论(欢呼声)中指出ASI不是上面的问题 - return的语法期望值紧随其后。不过,我认为ASI可能仍然是一个问题 - 如果每个\n自动获得;

我掀起了另一个ASI作为PITA的例子。

var a = function(b) {

    b.call();  

};

(function() {
    c = 'hello',
    a

    (function() {
        alert('hello')  
    })

})();

See it on jsFiddle

代码看起来很愚蠢(为什么a变量漂浮在那里)?

新手编码器可能不知道var作用域变量,并且可能会构建一个包含两个变量的列表。然后他们可以在括号中包裹一个函数(这个人还在学习:)。)。

在上面的示例中,该函数将被发送到a()并执行。

答案 3 :(得分:0)

正确的javascript不需要分号,但jslint可以帮助您找到潜在的错误,而不一定是破坏了javascript。您可以放心地忽略该错误。

答案 4 :(得分:0)

这是JSLint所需的版本

$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript");},cache:false});

注意:我添加了; to setRequestHeader函数调用。