[英]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的拒绝所有的运营商--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工具的路径设置为“ 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.