jslint工具的一个提示是:
++和——
++(递增)和——(递减)
众所周知,操作符会导致糟糕的代码
鼓励过度狡诈。他们
仅次于有缺陷的架构
使病毒和其他
安全威胁。这是一个加分项
选项,禁止使用这些
操作符。
我知道PHP结构像$foo[$bar++]可能很容易导致off-by-one错误,但我想不出一个更好的方法来控制循环比:
while( a < 10 ) do { /* foo */ a++; }
or
for (var i=0; i<10; i++) { /* foo */ }
jslint突出显示它们是因为有一些类似的语言缺少“++”和“——”语法或处理方式不同,还是有其他避免“++”和“——”的理由,我可能忽略了?
As mentioned in some of the existing answers (which annoyingly I'm unable to comment on), the problem is that x++ ++x evaluate to different values (before vs after the increment), which is not obvious and can be very confusing - if that value is used. cdmckay suggests quite wisely to allow use of increment operator, but only in a way that the returned value is not used, e.g. on its own line. I would also include the standard use within a for loop (but only in the third statement, whose return value is not used). I can't think of another example. Having been "burnt" myself, I would recommend the same guideline for other languages as well.
我不同意这种过分严格是因为很多JS程序员缺乏经验的说法。这正是典型的“过于聪明”的程序员所写的东西,我敢肯定,在更传统的语言中,以及在具有此类语言背景的JS开发人员中,这种情况更为常见。
我一直在看Douglas Crockford关于这个的视频他对不使用递增和递减的解释是
在过去的其他语言中,它被用来打破数组的界限,并导致各种各样的坏和
它更令人困惑,没有经验的JS开发人员不知道它到底是做什么的。
首先,JavaScript中的数组是动态大小的,因此,如果我说错了,请原谅我,在JavaScript中使用这种方法不可能打破数组的界限并访问不应该访问的数据。
其次,我们是否应该避免那些复杂的东西,当然问题不在于我们有这个工具,而在于有些开发者声称要做JavaScript,但不知道这些操作符是如何工作的?这很简单。Value ++,给我当前的值,在表达式之后加1,++ Value,在给我它之前增加值。
像a ++ + ++ b这样的表达式,只要记住上面的内容,就很容易计算出来。
var a = 1, b = 1, c;
c = a ++ + ++ b;
// c = 1 + 2 = 3;
// a = 2 (equals two after the expression is finished);
// b = 2;
我想你只需要记住谁需要通读代码,如果你有一个对JS了如指掌的团队,那你就不用担心了。如果不是,那么评论它,以不同的方式写它,等等。做你该做的。我不认为递增和递减本身就不好,或者产生错误,或者产生漏洞,可能只是根据你的读者的不同,可读性更差。
顺便说一句,我认为道格拉斯·克罗克福德是一个传奇,但我认为他引起了很多恐慌,因为他是一个不值得的操作员。
我活着就是为了证明我是错的……