不同类型的逻辑运算符

Logical operator with different types

我正在尝试解决著名的 FizzBu​​zz 测验,但我决定使用逻辑运算符 而不是 else提供后卫。

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

这应该打印从 1 到 100 的所有数字,但有一些例外。对于可以被 3 整除的数字,打印 "Fizz" 而不是数字,对于可以被 5 整除的数字,打印 "Buzz" 而不是打印 "FizzBuzz",对于可以同时被 3 和 5 整除的数字。

但它不打印任何数字。

output 声明可以是 num 比如:

var output = num;

因此您不必使用 || 运算符,只需直接打印 output 即可:

console.log(output);

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

使用let修复output的作用域:

for (var num = 1; num <= 100; num++) {
  let output;
  if (num % 5 === 0 && num % 3 === 0) {
    output = "FizzBuzz";
  } else if (num % 5 === 0) {
    output = "Buzz";
  } else if (num % 3 === 0) {
    output = "Fizz";
  } 
  console.log(output || num);
}


此外,如果您使用 num 初始化 output

,则可以删除 ||

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

我会说 Zakaria 的回答是正确的,但为了曝光,这是我的回答

for (var i = 1; i <= 100; i++) {
  var output = "";
  if (!(i % 3)) output += "Fizz";
  if (!(i % 5)) output += "Buzz";
  console.log(output || i);

}

我的逻辑是: 将输出值设置为等于 "",计算结果为假值。

如果一个数能被3整除,那么i % 3就是0,这也是一个假值所以我们用[=13=翻转它] 操作员。假设i=9,那么! (i%3) = !(9%3) = !(0) = !(false) = true.

因此,如果 !(i%3) 变为真,我们会在空字符串后附加“Fizz”,然后我们对 i%5 使用相同的逻辑,但会附加“Buzz”

注意这两个 if 语句的顺序很重要——将它们翻转过来,您将得到 BuzzFizz 而不是 FizzBu​​zz。

如果输出不是我们最初设置的空字符串,output || i将return output的值,给我们“Fizz”、“Buzz”或“FizzBu​​zz”,具体取决于。

如果输出 为空,则 output || i 将 return i

的值