繁体   English   中英

JSLint错误:意外' - '

[英]JSLint Error: Unexpected '--'

我在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;
        }
    }
};

--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喜欢显式。

JSLint的拒绝所有的运营商--ii-- ++ii++

只是放一条线

i -= 1;

在两行都有错误之前,用i替换--i ,JSLint应该很高兴。

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

改变这个:

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 ”。 相反的操作将是后递减( i-- ),这意味着“使用i作为当前操作,然后将其设置为i-1的值”

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

将行更改为:

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

让JSLint感到高兴。

请参阅为什么在JavaScript中避免使用递增(“++”)和递减(“ - ”)运算符? 后增量对比预增量 - Javascript优化 (以及其他通过谷歌搜索“前后增量javascript”)的++和 - 实际上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM