Javascript JSLint错误:意外'--';
我在一个JS文件中发现两个错误,都是“意外的”——“它在鼠标滚轮滚动的代码中(两次都是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
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]
的可读性较差,在一些实现中,我认为前缀稍微快一点。这是一个微观优化,在绝大多数情况下都无关紧要,但使用前缀加后缀(或词缀)递增/递减运算符最有可能是由于这个毫无意义的原因。很好的解释。