这个嵌套的switch语句出了什么问题?

时间:2014-08-14 18:08:25

标签: javascript switch-statement

此语句返回1-100中的所有数字,但未应用fizz-buzz规则。不知道为什么。你能解释一下吗?

for (var number = 1; number <= 100; number++) {
  switch(number) {
  case number % 3 == 0:
    console.log('Fizz');
    break;
  case number % 5 == 0:
    console.log('Buzz');
    break;
  case number % 5 == 0 && number % 3 == 0:
    console.log('FizzBuzz');
    break;
  default:
    console.log(number);
    break;
  }
}

3 个答案:

答案 0 :(得分:4)

您正在将数字与布尔表达式进行比较。该开关等同于:

if (number == (number % 3 == 0)) {
  console.log('Fizz');
} else if (number == (number % 5 == 0)) {
  console.log('Buzz');
} else if (number == (number % 5 == 0 && number % 3 == 0)) {
  console.log('FizzBuzz');
} else {
  console.log(number);
}

使用if语句而不是开关,并首先检查双重条件:

if (number % 5 == 0 && number % 3 == 0) {
  console.log('FizzBuzz');
} else if (number % 3 == 0) {
  console.log('Fizz');
} else if (number % 5 == 0) {
  console.log('Buzz');
} else {
  console.log(number);
}

答案 1 :(得分:1)

数字与案例的表达式匹配,因此如果数字是3,则不匹配&#34;数字%3 == 0&#34;因为&#34;数字%3 == 0&#34;是真的,而不是3

答案 2 :(得分:-1)

您的代码永远不会出现这种情况:

case number % 5 == 0 && number % 3 == 0

因为它已经成为第一种情况:

case number % 3 == 0:

解决这个问题的一种方法是将语句更改为:

case number % 3 == 0 && number % 5 != 0
case number % 5 == 0 && number % 3 != 0