Javascript for循环与对象而不是计数器?

时间:2011-09-17 00:46:30

标签: javascript for-loop

看一下这段代码:

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

我之前没有真正看到这样的循环,我想确保我理解正确。
假设families.length == 2 for行的第二部分在f = families[2]上返回false,我是否正确?

我原本以为它需要像f == families[2]这样才能返回false。

2 个答案:

答案 0 :(得分:11)

f = families[i]是一个返回families[i]值的表达式。 (它还具有将该值分配给f

的副作用

如果families.length === 2然后families[2] === undefined,则表达式返回undefined,这是假的并且会中断循环。

为了获得更多黑客的乐趣,您可以转向

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

for (var i = 0, f; f = families[i++]; /* body */);

您可能需要将;替换为,,将i替换为i-1。你也只是谋杀了可读性。

还应该指出for循环对于可读性来说是愚蠢的。

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

明显更具可读性。

答案 1 :(得分:0)

这看起来像是一种愚蠢的做法

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