将 != 运算符与 || 一起使用时的困惑JavaScript 中的运算符
Posted
技术标签:
【中文标题】将 != 运算符与 || 一起使用时的困惑JavaScript 中的运算符【英文标题】:Confusion when using the != operator with the || operator in 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
一次只能等于一个值
【参考方案1】:
你写下你的条件的方式总是正确的,因为它不可能同时是所有这三件事。
在英语中,它的意思是“如果它不是石头,或者不是剪刀,或者不是纸……”
如果是石头就不是剪刀,如果是剪刀就不是纸,等等,所以你的测试总是正确的。
你想要 AND:“如果不是石头,也不是剪刀,也不是纸……”
这很容易被绊倒,因为我们倾向于认为“如果它不是石头、纸或剪刀”,但这里的逻辑是独立测试每个比较并对它们进行 OR 运算。
或者你可以这样做:
const options = ["rock", "paper", "scissors"];
if (!options.includes(userChoice))
…
【讨论】:
你可以像用英语一样写它,首先检查它是否是这些值之一,然后否定它。 (德摩根定律。)if (!(choice == "rock" || choice == "paper" || choice == "scissors"))
...
谢谢你,非常清楚。还要感谢替代更清洁的方法,当我了解有关数组的更多信息时,我会更多地研究它。以上是关于将 != 运算符与 || 一起使用时的困惑JavaScript 中的运算符的主要内容,如果未能解决你的问题,请参考以下文章
将 Rollup、ES 模块、TypeScript 和 JSX 连接在一起时的令人困惑的行为