jslint工具的一个提示是:
++和——
++(递增)和——(递减)
众所周知,操作符会导致糟糕的代码
鼓励过度狡诈。他们
仅次于有缺陷的架构
使病毒和其他
安全威胁。这是一个加分项
选项,禁止使用这些
操作符。
我知道PHP结构像$foo[$bar++]可能很容易导致off-by-one错误,但我想不出一个更好的方法来控制循环比:
while( a < 10 ) do { /* foo */ a++; }
or
for (var i=0; i<10; i++) { /* foo */ }
jslint突出显示它们是因为有一些类似的语言缺少“++”和“——”语法或处理方式不同,还是有其他避免“++”和“——”的理由,我可能忽略了?
我认为在两种情况下应该避免使用:
1)当你有一个在很多行中使用的变量,你在使用它的第一个语句(或者最后,或者更糟糕的是,在中间)上增加/减少它:
// It's Java, but applies to Js too
vi = list.get ( ++i );
vi1 = list.get ( i + 1 )
out.println ( "Processing values: " + vi + ", " + vi1 )
if ( i < list.size () - 1 ) ...
在这样的例子中,您很容易忽略变量是自动递增/递减的,甚至会删除第一个语句。换句话说,只在非常短的块中使用它,或者变量只出现在块中的几个结束语句中。
2)在同一语句中出现多个关于同一个变量的++和-的情况。很难记住在这样的情况下会发生什么:
result = ( ++x - --x ) * x++;
考试和专业测试会询问类似上述的例子,事实上,我在寻找其中一个的文档时偶然发现了这个问题,但在现实生活中,人们不应该被迫对一行代码考虑这么多。
我认为在两种情况下应该避免使用:
1)当你有一个在很多行中使用的变量,你在使用它的第一个语句(或者最后,或者更糟糕的是,在中间)上增加/减少它:
// It's Java, but applies to Js too
vi = list.get ( ++i );
vi1 = list.get ( i + 1 )
out.println ( "Processing values: " + vi + ", " + vi1 )
if ( i < list.size () - 1 ) ...
在这样的例子中,您很容易忽略变量是自动递增/递减的,甚至会删除第一个语句。换句话说,只在非常短的块中使用它,或者变量只出现在块中的几个结束语句中。
2)在同一语句中出现多个关于同一个变量的++和-的情况。很难记住在这样的情况下会发生什么:
result = ( ++x - --x ) * x++;
考试和专业测试会询问类似上述的例子,事实上,我在寻找其中一个的文档时偶然发现了这个问题,但在现实生活中,人们不应该被迫对一行代码考虑这么多。