jslint中的“unexpected ++”错误

那么最好的做法是什么呢?

Jslint解释说,它“增加了困惑”。 我真的没有看到…

编辑:代码,请求:

var all,l,elements,e; all = inElement.getElementsByTagName('*'); l = all.length; elements = []; for (e = 0; e < l; (e++)) { if (findIn) { if (all[e].className.indexOf(className) > 0) { elements[elements.length] = all[e]; } } else { if (all[e].className === className) { elements[elements.length] = all[e]; } } } 

如果您想遵循jslint的build议,请使用i += 1

只需在你的javascript文件前添加/*jslint plusplus: true */

为了避免混淆,以及在使用缩小器时可能出现的问题,当与相同的(+或 – )一起使用时,总是在运算符和它的操作数周围包起来。

 var i = 0, j = 0; alert(i++ +j); 

这增加了我和j(并增加我作为副作用)导致0被警告。

但是,有人来到这里并且移动了这个空间?

 var i = 0, j = 0; alert(i+ ++j); 

现在这个第一个递增j,然后把我加到j的新值,导致1被警告。

这可以很容易地通过做

 var i = 0, j = 0; alert((i++) +j); 

现在这个不能弄错了。

就个人而言,我更喜欢把自己的语句如i++放在一行上。 把它们作为一个更大的陈述的一部分,可能会让那些不清楚该行应该做什么的人感到困惑。

例如,而不是:

 value = func(i++ * 3); 

我会这样做:

 value = func(i * 3); i++; 

这也意味着人们不必记得i++++i是如何工作的,并且不需要应用相当多的偏好规则。

++运算符的真正问题在于它是一个带有副作用的运算符,因此完全反对函数式编程的原理。

实现i++的“ function ”方式是i = i + 1 ,您明确地重新分配没有副作用的variables,然后使用它。

混淆的可能性是++通过添加一个值并将其重新分配给variables来做两件事情。

JSLint友好循环

 for (i = 0; i < 10; i += 1) { //Do somthing } 

请注意,++运算符依赖于前一个/下一个variables的位置以及换行符/分号来确定操作的顺序。

 var a = 1; var b = a++; console.log(b); // b = 1 console.log(a); // a = 2 var a = 1; var b = ++a; console.log(b); // b = 2 console.log(a); // a = 2 

有一种叫做预增量的东西:++ i和后增i ++,有一个区别:

 var i = 9; alert(++i); //-> alerts 10 var j = 9; alert(j++); //-> alerts 9 alert(j); //-> alerts 10 now, as expected var k = 9; alert((k++)); //-> still alerts 9 even with extra parentheses