石头剪刀布和 !== 比较
Rock Paper Scissors and the !== comparison
我想尝试使用 !==
条件。为什么此代码记录 'Invalid choice' 和未定义?
const getUserChoice = userInput => {
userInput = userInput.toLowerCase();
if (userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors') {
console.log('Invalid choice');
} else {
return userInput;
}
};
console.log(getUserChoice('paper'));
我想在剪刀石头布游戏中尝试使用 !== 而不是 === if 语句。问题是语法还是逻辑?
无论 userInput
的值如何,此条件始终为真:
userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors'
您想使用 &&
而不是 ||
,像这样:
userInput !== 'rock' && userInput !== 'paper' && userInput !== 'scissors'
这样,如果 userInput
不是三个允许值之一,您将只会看到 Invalid choice
。
最后,您看到了 undefined
,因为您正在记录 getUserChoice
的输出,但是当 [=20] 时 getUserChoice
没有 return 任何内容=]语句被命中。
您的函数不会在 truthy if 路径上返回任何内容,只会在 else 路径上返回任何内容。
此外 if(x==="a" || x==="b" || ...)
(又名 if(!(...))
)的倒数是 if(x!=="a" && x!=="b" && ...)
您需要将 ||
交换为 &&
并将 &&
交换为||
也是,不只是 ===
到 !==
和 !==
到 ===
。
这更像是一个逻辑问题。您要求代码检查用户提交的值是否不同于 'rock' 或不同于 'paper' 或不同于 'scissor'.
因此,如果您尝试插入一个合适的值,例如 'paper',检查仍然会通过,因为 'paper' 无论如何都不同于 'rock' 或 'scissor'。
在这种情况下,您可能需要检查用户传递的单词是否不同于 'paper' AND 'rock' AND 'scissor'.
由于 Short-circuit evaluation,您获得 Invalid choice
。这意味着,逻辑 OR (||)
表达式从左到右计算,任何左边的值得到 truthy-value 然后其余的将不会被计算。
userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors'
当userInput
等于paper
并执行上述条件第一个得到truthy-vaule,因为paper
和rock
不一样。因此,其余的将不会被评估 (userInput !== 'paper' || userInput !== 'scissors')
。该条件变为真并记录 invalid choice
。在这种情况下你没有 return 任何东西所以 getUserChoice
函数 return undefined
.
我想尝试使用 !==
条件。为什么此代码记录 'Invalid choice' 和未定义?
const getUserChoice = userInput => {
userInput = userInput.toLowerCase();
if (userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors') {
console.log('Invalid choice');
} else {
return userInput;
}
};
console.log(getUserChoice('paper'));
我想在剪刀石头布游戏中尝试使用 !== 而不是 === if 语句。问题是语法还是逻辑?
无论 userInput
的值如何,此条件始终为真:
userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors'
您想使用 &&
而不是 ||
,像这样:
userInput !== 'rock' && userInput !== 'paper' && userInput !== 'scissors'
这样,如果 userInput
不是三个允许值之一,您将只会看到 Invalid choice
。
最后,您看到了 undefined
,因为您正在记录 getUserChoice
的输出,但是当 [=20] 时 getUserChoice
没有 return 任何内容=]语句被命中。
您的函数不会在 truthy if 路径上返回任何内容,只会在 else 路径上返回任何内容。
此外 if(x==="a" || x==="b" || ...)
(又名 if(!(...))
)的倒数是 if(x!=="a" && x!=="b" && ...)
您需要将 ||
交换为 &&
并将 &&
交换为||
也是,不只是 ===
到 !==
和 !==
到 ===
。
这更像是一个逻辑问题。您要求代码检查用户提交的值是否不同于 'rock' 或不同于 'paper' 或不同于 'scissor'.
因此,如果您尝试插入一个合适的值,例如 'paper',检查仍然会通过,因为 'paper' 无论如何都不同于 'rock' 或 'scissor'。
在这种情况下,您可能需要检查用户传递的单词是否不同于 'paper' AND 'rock' AND 'scissor'.
由于 Short-circuit evaluation,您获得 Invalid choice
。这意味着,逻辑 OR (||)
表达式从左到右计算,任何左边的值得到 truthy-value 然后其余的将不会被计算。
userInput !== 'rock' || userInput !== 'paper' || userInput !== 'scissors'
当userInput
等于paper
并执行上述条件第一个得到truthy-vaule,因为paper
和rock
不一样。因此,其余的将不会被评估 (userInput !== 'paper' || userInput !== 'scissors')
。该条件变为真并记录 invalid choice
。在这种情况下你没有 return 任何东西所以 getUserChoice
函数 return undefined
.