的JavaScript FizzBuzz /如果else语句
问题描述:
下面是代码:的JavaScript FizzBuzz /如果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
?
答
一旦在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);
}
}
如果你正在寻找一个较短的版本FizzBuzz的,这里是由保罗·爱尔兰的一个有趣的答案(为了清楚起见增加了更多的括号内):
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
因为一旦条件成立,它就不会落入下一个条件。如果你想要的话,使用多个ifs – Li357