将反向循环编写为:
是一个坏习惯for (i = N; i--;)
以便访问(N-1)为0
如果是这样,为什么? jsLint肯定不喜欢它。
答案 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)
是。有一个很好的理由。可读性。