使用对象而不是计数器进行循环的Javascript?

使用对象而不是计数器进行循环的Javascript?,javascript,for-loop,Javascript,For Loop,看看这段代码: for (var i = 0, f; f = families[i]; i++) { } 我以前从未见过这样的循环,我想确定我是否正确理解了它。 我假设如果families.length==2,那么for行的第二部分将在f=families[2]上返回false,是否正确 我原以为它需要类似于f==families[2]才能返回false。f=families[I]是一个返回families[I]值的表达式。(它还具有将该值指定给f的副作用) 如果families.length

看看这段代码:

for (var i = 0, f; f = families[i]; i++) {
}
我以前从未见过这样的循环,我想确定我是否正确理解了它。
我假设如果
families.length==2
,那么
for
行的
第二部分将在
f=families[2]
上返回false,是否正确


我原以为它需要类似于
f==families[2]
才能返回false。

f=families[I]
是一个返回
families[I]
值的表达式。(它还具有将该值指定给
f
的副作用)

如果
families.length==2
families[2]==undefined
因此表达式返回的
undefined
为假并中断循环

要获得更多的黑客乐趣,您可以

for (var i = 0, f; f = families[i]; i++) {
  // body
}
进入

您可能需要字符串替换
替换为
和字符串将
i
替换为
i-1
。你还破坏了可读性

Object.keys(families).forEach(function(key) {
  var family = families[key];
  /* body */
});
还应该指出,for循环对于可读性来说是愚蠢的

Object.keys(families).forEach(function(key) {
  var family = families[key];
  /* body */
});

更具可读性。

这似乎是一种愚蠢的做法

for(var i in families) {
    if (families.hasOwnProperty(i)) {
        // do whatever you want with families[i]
        console.log(families[i]);
    }
}

我很好奇,我假设循环不会停止,直到满足某个标准,而不是在处理所有条目时。你也只是破坏了可读性。嘿嘿。在键盘上的天文台上的芥茉上校。事实上,而且在Leopy的评论中,也有可能在阵列中部某处的法尔西值会导致循环中断,但不一定总是在你到达结尾时…@ Funka,因为是<代码>家庭< /代码>法尔茜;最后一个例子在语义上不一样;族可以附加其他属性(或者不是“真实数组”)。但否则,+1@pst任何有能力的程序员都会使这些附加属性不可枚举;)这种方法对我来说毫无意义。为什么要使用这个而不是常规的for循环?对我来说,我发布的循环本质上是从一个常规for循环中取出一行,我会立即说一些类似
var family=families[I]这是不同的。。。族可以具有非0..n的属性,即使是“own”。