将 != 运算符与 || 一起使用时的混淆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)) {
…
}
我是 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)) {
…
}