按位运算符是否有可能一举完成“++ i, - j”的等效操作?

时间:2015-10-29 15:05:58

标签: javascript algorithm optimization bit-manipulation bitwise-operators

所以我想做一些像

这样的事情
for ( var i = 0, j = (arr.length - 1); i < j; (++i; --j;) )

即。有两个操作,++i--j,作为执行for循环体后发生的事情,相当于

for ( var i = 0, j = (arr.length - 1); i < j; )
{
    // ...
    ++i; --j;
}

是否可以在for-loop的声明中完成所有操作?在ij上是否可以在单个语句中执行++i; --j一些奇特的按位操作?

3 个答案:

答案 0 :(得分:1)

逗号运营商是您在寻找什么?

for(var i=0, j=10; i<j; i++, j--)

答案 1 :(得分:1)

按位运算符确实可以解决问题:

for(var i=0,j=arr.length-1; i < j; i++ & j--){
    alert(arr[i]+arr[j]);
}

这是有效的,因为++和 - 具有返回值。根据您是将它们用作前置或后置运算符,返回值可以是递增前后的值。 (与减量运算符类似)

由于JavaScript没有强类型,因此可以对位运算符使用整数值。数字!= 0将被解释为true,0将被解释为false。 &amp;使用运算符以便评估两个操作数。 &安培;&安培;如果左侧评估为真,则仅评估右侧。

毋庸置疑,所有这些都是不必要的技巧,真正应该被更干净的代码所取代。在你的例子中,只需用arr.length-i-1替换j,你就不必处理两个循环变量。

答案 2 :(得分:1)

虽然其他答案清楚地显示了如何实现您想要的目标,但我建议您不要使用两个计数器,如果可以避免的话。在这里,您可以使用arr.length - j - 1代替i