使用对象而不是计数器进行循环的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”。