2016-09-25 188 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