JSLint错误:意外' - '

时间:2012-02-07 20:19:56

标签: javascript jquery syntax jslint

我在JS文件中遇到两个错误,都是“意外” - “。”它位于鼠标滚轮滚动的代码中(两次都为this.addEventListener( types[--i], handler, false );)。我以前从未见过这种语法。它是什么,我应该如何纠正它,使JSLint更快乐?

(function($) {
var types = ['DOMMouseScroll', 'mousewheel'];
$.event.special.mousewheel = {
    setup: function() {
        var i;
        if ( this.addEventListener ) {
            i = types.length;
            while ( i >= 0 ) {
                this.addEventListener( types[--i], handler, false );
            }
        } else {
            this.onmousewheel = handler;
        }
    },

    teardown: function() {
        if ( this.removeEventListener ) {
            i = types.length;
            while ( i >= 0 ) {
                this.removeEventListener( types[--i], handler, false );
            }
        } else {
            this.onmousewheel = null;
        }
    }
};

4 个答案:

答案 0 :(得分:6)

--n语法递减变量。您可能已经看到的更为常见的是n++,它是相似的,但会增加变量。

--++可以出现在变量之前或之后,并且存在细微差别。当它出现时,它会改变该值,然后返回更改后的值。当它出现时,它返回原始值。直接使用该值时,这会产生影响。

var i;

// affix
i = 1; console.log(i++, i) // 1 2
i = 1; console.log(i--, i) // 1 0

// prefix
i = 1; console.log(++i, i) // 2 2
i = 1; console.log(--i, i) // 0 0

注意前缀增量或减量表达式的值如何在操作后为i返回相同的值,而词缀版本则没有。

所以,长话短说,JSLint并不喜欢前缀增量运算符。但这应该是等价的:

while ( i >= 0 ) {
  i -= 1;
  this.removeEventListener( types[i], handler, false );
}

如果不使用递减操作的直接结果,那么操作符的工作方式和返回的内容就不再重要了。它也更明确,JSLint喜欢显式。

答案 1 :(得分:3)

JSLint拒绝所有运算符--ii--++ii++

只需添加一行

i -= 1;

在两行中出现错误并将--i替换为i,并且JSLint应该感到高兴。

--i在执行周围语句之前将变量i减少一个。使用它的代码的可读性比没有它的代码更糟糕。这就是为什么JSLint不鼓励使用它的原因。

答案 2 :(得分:1)

改变这个:

while ( i >= 0 ) {
    this.addEventListener( types[--i], handler, false );
}

对此:

while ( i >= 0 ) {
    i -= 1;
    this.addEventListener( types[i], handler, false );
}

变量前面的--运算符在使用前递减变量的值,将新值存储到变量中。因此,--i是预先减少的,并且意味着“将i设置为i-1的值,然后继续执行您要对i进行的操作”< / em>的。相反的操作将是后递减(i--),这意味着“使用i作为当前操作,然后将其设置为值i-1

Crockford默认JSLint拒绝这种操作,因为他认为它令人困惑,难以阅读,而且维护较少。您还可以将配置LINT工具的路径设置为“Tolerate - and ++”(LINT属性plusplus: true)。但是,在您的情况下,对代码的调整很小,因此编辑可能更可取。

答案 3 :(得分:1)

将行更改为:

this.addEventListener( types[i -= 1], handler, false );

使JSLint感到高兴。

请参阅Why avoid increment ("++") and decrement ("--") operators in JavaScript?post increment vs pre increment - Javascript Optimization(以及其他人通过Google搜索“前后增量javascript”)了解++和 - 实际上是做什么。