jslint中的“意外的++”错误

时间:2010-06-08 18:44:30

标签: javascript jslint

的最佳做法是什么呢?

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];
        }
    }
  }

8 个答案:

答案 0 :(得分:92)

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

答案 1 :(得分:88)

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

答案 2 :(得分:28)

为了避免混淆,以及使用minifiers时可能出现的问题,当与同一个(+或 - )一起使用时,总是将parens包裹在操作符及其操作数周围。

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

这会添加i和j(并将i作为副作用递增),从而导致0被警告。

但是有人出现并移动空间?

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

现在第一个增加j,然后将i添加到j的新值,导致1被警告。

这可以通过

轻松解决
var i = 0, j = 0;
alert((i++) +j); 

现在这不容错误。

答案 3 :(得分:14)

就个人而言,我更喜欢将i++等语句单独放在一行。将它们作为较大陈述的一部分包括在内可能会使那些不确定该行应该做什么的人感到困惑。

例如,而不是:

value = func(i++ * 3);

我会这样做:

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

这也意味着人们不必记住i++++i的工作方式,并且无需应用相当多的偏好规则。

答案 4 :(得分:9)

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

实现i++的“功能”方式为i = i + 1,您可以明确地重新分配变量而不会产生副作用,然后再使用它。

混淆的可能性是++通过添加值并将其重新分配给变量来完成两件事。

答案 5 :(得分:7)

JSLint友好循环

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

答案 6 :(得分:4)

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

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

答案 7 :(得分:3)

有一种称为预增量的东西:++ 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