Jam*_*ght 6 javascript for-loop
看看这段代码:
for (var i = 0, f; f = families[i]; i++) {
}
Run Code Online (Sandbox Code Playgroud)
我之前没有真正看过这样的循环,我想确保我理解正确.
我是否正确假设如果families.length == 2该行的第二部分for将返回false f = families[2]?
我本以为它需要像是f == families[2]为了返回虚假.
Ray*_*nos 11
f = families[i]是一个返回值的表达式families[i].(它还具有分配该值的副作用f)
那么如果families.length === 2那么families[2] === undefined表达式返回undefinedfalse,并打破循环.
为了获得更多的黑客乐趣,你可以转向
for (var i = 0, f; f = families[i]; i++) {
// body
}
Run Code Online (Sandbox Code Playgroud)
成
for (var i = 0, f; f = families[i++]; /* body */);
Run Code Online (Sandbox Code Playgroud)
您可能需要字符串替换;与,和字符串替换i用i-1.你也只是谋杀了可读性.
还应该指出for循环对于可读性来说是愚蠢的.
Object.keys(families).forEach(function(key) {
var family = families[key];
/* body */
});
Run Code Online (Sandbox Code Playgroud)
显着性更强.