将 != 运算符与 || 一起使用时的混淆JavaScript 中的运算符

Confusion when using the != operator with the || operator in JavaScript

我是 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!

看来我不太明白怎么用||和 != 在一起。

编辑:我认为 ||测试了第一个假值,并且 && 测试了第一个真值。我倒退了,应该使用 && 来找到第一个虚假值。感谢您指出我的错误。

你写条件的方式总是正确的,因为不可能同时满足这三个条件。

英语翻译为“如果它不是石头,或者它不是剪刀,或者它不是纸……”

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

你想要并且:“如果它不是石头而且它不是剪刀而且它不是纸......”

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


或者你可以这样做:

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

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