【问题标题】:Confusion when using the != operator with the || operator in JavaScript将 != 运算符与 || 一起使用时的困惑JavaScript 中的运算符
【发布时间】:2022-01-01 15:17:23
【问题描述】:

我是 JavaScript 和编程新手。我正在编写一个玩石头剪刀布的程序,我想在用户未能输入正确选择时捕捉到。

这是我的 userChoice() 函数,带有一个 if 语句来捕获不正确的选择。

function userChoice() {
  let choice = prompt('Choose rock, paper, or scissors.', 'rock')
  // Convert user input to lowercase
  choice = choice.toLowerCase()
  // If the user doesn't choose 'rock', 'paper', or 'scissors'... 
  if (choice != 'rock' ||
      choice != 'paper' ||
      choice != 'scissors') {
        alert('Please choose a valid choice.') // ... ask them to make a valid choice. 
        return userChoice(); // call the userChoice() function again.
  } else {
    console.log(`Player1 chooses ${choice}`)
    return userChoice()
  }
}

当我按照写的方式调用函数时,它总是触发 if 语句。

只有在我使用 || 时才会这样做运算符来定义多个 != 比较。如果我只使用一个 != 比较,没有 ||运算符,它工作正常。

if (choice != 'rock') // Works fine!

看来我不是很了解如何使用||和 != 在一起。

编辑:我以为 ||测试第一个假值, && 测试第一个真值。我把它倒过来了,应该用 && 来找到第一个假值。感谢您指出我的错误。

【问题讨论】:

  • 你说的是“如果它不是石头、不是纸或者不是剪刀”,这总是正确的,因为即使它是石头,它也不是剪刀。你应该使用“如果它不是石头而且它不是纸而且它不是剪刀”。并且是 &&,而不是 ||。
  • 您可以使用array#includes 来检查值是否介于石头、纸和剪刀之间。!['rock', 'paper', 'scissors'].includes(choice)
  • 想想逻辑 ...A not equal 1 OR A not equal 2 总是正确的,因为A 一次只能等于一个值

标签: javascript conditional-statements logical-operators


【解决方案1】:

你写下你的条件的方式总是正确的,因为它不可能同时是所有这三件事。

在英语中,它的意思是“如果它不是石头,或者不是剪刀,或者不是纸……”

如果是石头就不是剪刀,如果是剪刀就不是纸,等等,所以你的测试总是正确的。

你想要 AND:“如果不是石头,也不是剪刀,也不是纸……”

这很容易被绊倒,因为我们倾向于认为“如果它不是石头、纸或剪刀”,但这里的逻辑是独立测试每个比较并对它们进行 OR 运算。


或者你可以这样做:

const options = ["rock", "paper", "scissors"];

if (!options.includes(userChoice)) {
   …
}

【讨论】:

  • 你可以像用英语一样写它,首先检查它是否是这些值之一,然后否定它。 (德摩根定律。)if (!(choice == "rock" || choice == "paper" || choice == "scissors")) ...
  • 谢谢你,非常清楚。还要感谢替代更清洁的方法,当我了解有关数组的更多信息时,我会更多地研究它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2011-06-12
相关资源
最近更新 更多