【问题标题】:Logical operator with different types不同类型的逻辑运算符
【发布时间】:2018-05-22 03:39:32
【问题描述】:

我正在尝试解决著名的 FizzBu​​zz 测验,但我决定使用逻辑运算符 or 而不是 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”,而对于能被 3 和 5 整除的数字,则打印“FizzBu​​zz”。

但它不打印任何数字。

【问题讨论】:

  • 您的console.log(output || num) 输出output 是否已定义。如果未定义,则输出num。因为定义了output,所以它会被输出,而num 不会。

标签: javascript loops logical-operators console.log


【解决方案1】:

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);
}

【讨论】:

  • 他们也可以将输出的默认值设为空字符串,因为"" || 'yes' 将返回yes
  • 但我认为当我没有为变量定义值时,它会自动取消定义。
【解决方案2】:

我会说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,这也是一个错误值,所以我们使用!运算符来翻转它。假设i=9,那么! (i%3) = !(9%3) = !(0) = !(false) = true

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

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

如果输出不是我们最初设置的空字符串,output || i 将返回output 的值,根据情况为我们提供“Fizz”、“Buzz”或“FizzBu​​zz” .

如果输出为空,则output || i 将返回i 的值

【讨论】:

    【解决方案3】:

    使用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);
    }

    【讨论】:

    • let和var有什么区别。为什么 let 有效而 var 无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2014-03-27
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2017-09-08
    相关资源
    最近更新 更多