2016-09-25 187 views
-1

下面是代码的JavaScript FizzBu​​zz /如果else语句

var i = 0; 
for (i = 1; i <= 20; i++) { 
    if (i % 5 === 0 && i % 3 === 0) { 
     console.log("FizzBuzz"); 
    } else if (i % 5 === 0) { 
     console.log("Buzz"); 
    } else if (i % 3 === 0) { 
     console.log("Fizz"); 
    } else { 
     console.log(i); 
    } 
} 

,这是输出

1 
2 
Fizz 
4 
Buzz 
Fizz 
7 
8 
Fizz 
Buzz 
11 
Fizz 
13 
14 
FizzBuzz 
16 
17 
Fizz 
19 
Buzz 

的代码就可以了,并且效果很好,但我不知道理解为什么只打印FizzBuzz逻辑运算符& &在if语句中,而不在else if

+2

因为一旦条件成立,它就不会落入下一个条件。如果你想要的话,使用多个ifs – Li357

回答

3

一旦在if (...)/else if (...)的条件之一是true(从顶部到底部),的​​其余的条件不被评估并且程序进入下一个循环(下i)值。

如果交换顺序:

var i = 0; 
for (i = 1; i <= 20; i++) { 
    if (i % 5 === 0) { 
     // This evaluates to true for a number that is multiple of 5 and 3, and it prints "Buzz", and goes into the next loop. 
     console.log("Buzz"); 
    } else if (i % 5 === 0 && i % 3 === 0) { 
     console.log("FizzBuzz"); 
    } else if (i % 3 === 0) { 
     console.log("Fizz"); 
    } else { 
     console.log(i); 
    } 
} 

如果你正在寻找一个较短的版本FizzBu​​zz的,这里是由保罗·爱尔兰的一个有趣的答案(为了清楚起见增加了更多的括号内):

for (var i = 1; i <= 100; i++) { 
    var f = i % 3 == 0, b = i % 5 == 0; 
    console.log(f ? (b ? "FizzBuzz" : "Fizz") : (b ? "Buzz" : i)); 
} 

来源:https://gist.github.com/jaysonrowe/1592432#gistcomment-790724