是否有充分的理由避免在JS中没有最终表达式的FOR循环?

时间:2012-02-03 21:12:16

标签: javascript performance for-loop jslint

将反向循环编写为:

是一个坏习惯
for (i = N; i--;)

以便访问(N-1)为0

如果是这样,为什么? jsLint肯定不喜欢它。

6 个答案:

答案 0 :(得分:6)

没有任何技术原因可以解决这个问题。但是,它clearly具有可读性问题,因为有人立刻就会发现“无法正常工作!”反应

这是jQuery团队struggles with的问题 - 是否使用以牺牲清晰度和可维护性为代价来节省字节的新颖构造。这真的归结为它是否值得节省1或3个字节:

for(var i=9;i--;)
var i=9;while(i--)
for(var i=9;i>0;i--)

在这种情况下,可能不是。

答案 1 :(得分:4)

它的可读性较差,如果没有您的解释,我需要几秒钟才能理解循环的作用。为什么不简单:

while(i-- > 0)

答案 2 :(得分:4)

您是否考虑过可读性?您可能自己很了解它,但其他开发人员可能会感到困惑,因为for“成语”的部分是usually named as

for ([initialization]; [condition]; [final-expression])

虽然条件在技术上可以是任何表达式,但是你的版本不符合这个习惯用法,因为你使用的“条件”部分不仅仅是定义一个条件 - 它也会偷偷地减少i

答案 3 :(得分:2)

  

“将反向循环编写为”

是一个坏习惯
for (i = N; i--;)

这是一个意见问题,但它实际上是初始化的反向while,因此在我的意见中,它不是“坏习惯”。这只是一种编码风格。

规范使for 可选的部分为开发人员提供了灵活性。

  

“jsLint肯定不喜欢它。”

谁在乎呢。你不一定要遵循jsLint的意见。

答案 4 :(得分:1)

我猜这些答案是非常主观的。我不认为这是一个坏习惯,但我发现它在美学上令人不悦。这可以更优雅地表达为:

for (i = N - 1; i >= 0; i--) {
    // do something here.
}

// And if it is really important that i should be 0 here
// as it is in your original code.
i = 0

在浏览大量恰好包含此代码的代码时,此代码在我们的大脑上更容易。

答案 5 :(得分:1)

是。有一个很好的理由。可读性。