看看这段代码:
我是否正确假设如果families.length == 2,for行的第二部分将在f = families [2]上返回false? @H_502_4@我本以为它需要像f ==系列[2]才能返回false.
for (var i = 0,f; f = families[i]; i++) { }@H_502_4@我之前没有真正看过这样的循环,我想确保我理解正确.
我是否正确假设如果families.length == 2,for行的第二部分将在f = families [2]上返回false? @H_502_4@我本以为它需要像f ==系列[2]才能返回false.
解决方法
f = families [i]是一个返回families [i]值的表达式. (它还具有将该值赋给f的副作用)
@H_502_4@如果families.length === 2那么族[2] === undefined因此表达式返回undefined,这是假的并且打破了循环.
@H_502_4@为了获得更多的黑客乐趣,你可以转向
for (var i = 0,f; f = families[i]; i++) { // body }@H_502_4@成
for (var i = 0,f; f = families[i++]; /* body */);@H_502_4@您可能需要更换字符串; with,和string用i-1替换i.你也只是谋杀了可读性. @H_502_4@还应该指出for循环对于可读性来说是愚蠢的.
Object.keys(families).forEach(function(key) { var family = families[key]; /* body */ });@H_502_4@显着性更强.