147

那么最好的做法是什么

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

8 回答 8

94

长期存在的最佳实践:i += 1按照 jslint 的建议改用。

至于为什么它是比 更好的做法++,根据 Crockford 的说法:

递增++和递减--运算符使编写极其简洁的风格成为可能。在诸如 C 之类的语言中,它们使得编写单行语句成为可能:for (p = src, q = dest; !*p; p++, q++) *q = *p;大多数造成严重安全漏洞的缓冲区溢出错误都是由这样的代码引起的。在我自己的实践中,我观察到当我使用++and时--,我的代码往往过于紧凑、过于棘手、过于神秘。所以,作为纪律问题,我不再使用它们了。

编辑:包括来自Nope的评论,因为这个答案继续获得意见。请继续支持他的评论:)

于 2010-06-09T04:42:39.477 回答
88

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

于 2012-09-18T11:17:59.223 回答
28

为避免混淆和使用压缩器时可能出现的问题,当与相同的(+ 或 -)一起使用时,请始终将括号包裹在运算符及其操作数周围。

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); 

现在这不会是错误的。

于 2010-06-08T18:54:11.107 回答
13

就个人而言,我更喜欢将诸如此类的语句单独放在i++一行上。将它们作为更大的语句的一部分包含在内可能会导致那些不确定该行应该做什么的人感到困惑。

例如,而不是:

value = func(i++ * 3);

我会这样做:

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

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

于 2010-06-08T18:47:04.260 回答
9

运算符的真正问题++是它是一个有副作用的运算符,因此它完全违背了函数式编程的原则。

功能性”的实现方式i++i = i + 1您明确地重新分配没有副作用的变量,然后使用它。

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

于 2013-03-13T22:09:16.020 回答
7

JSLint 友好循环

for (i = 0; i < 10; i += 1) {
    //Do somthing
}
于 2015-04-16T22:33:44.950 回答
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
于 2013-11-01T16:27:05.667 回答
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
于 2013-03-13T21:57:35.900 回答