Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSLint错误:意外'--';_Javascript_Jquery_Syntax_Jslint - Fatal编程技术网

Javascript JSLint错误:意外'--';

Javascript JSLint错误:意外'--';,javascript,jquery,syntax,jslint,Javascript,Jquery,Syntax,Jslint,我在一个JS文件中发现两个错误,都是“意外的”——“它在鼠标滚轮滚动的代码中(两次都是this.addEventListener(类型[--I],handler,false);)。我从没见过这个,我以前在任何地方见过。这是什么?我应该如何纠正它,使其正确,并使JSLint更快乐 (function($) { var types = ['DOMMouseScroll', 'mousewheel']; $.event.special.mousewheel = { setup: functio

我在一个JS文件中发现两个错误,都是“意外的”——“它在鼠标滚轮滚动的代码中(两次都是
this.addEventListener(类型[--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;
        }
    }
};

JSLint拒绝所有操作符
--i
i--
++i
i++

就跟我说一句话

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工具配置为“容忍--and++”(LINT属性
plusplus:true
)。但是,在您的情况下,对代码的调整是最小的,因此编辑可能更可取。

将行更改为:

this.addEventListener( types[i -= 1], handler, false );
让杰斯林特高兴

查看和(和其他人通过谷歌搜索“增量前和增量后javascript”),了解++和--实际做的事情。

--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停止愚蠢地对待已经存在了十年的运算符,如++,不要因为这个警告而更改代码!JSLint是一个刺痛点,而且永远都是一个刺痛点。此外,如果你正在完善你想分享但又不感到羞耻的可重用代码/插件,它也会非常有用。我倾向于同意Crockford在这一特定检查上是主观的。也就是说,我不认为他是个傻子或“混蛋”。说他是这样也是同样主观的。JSLint会拒绝理解良好的递增/递减运算符,但又不坚持
i-=1
独立运行,这似乎有点奇怪。在我看来
types[i-=1]
的可读性较差,在一些实现中,我认为前缀稍微快一点。这是一个微观优化,在绝大多数情况下都无关紧要,但使用前缀加后缀(或词缀)递增/递减运算符最有可能是由于这个毫无意义的原因。很好的解释。