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