Javascript:如果语句的计算结果始终为true,则为False



我正在编写一个简单的基于控制台的石头剪刀游戏作为练习。但是,以下条件的计算结果始终为true。

if (playerselection === computerselection) {
console.log('Draw!');

我介绍了几个console.log命令以及断点,以确定是否存在范围问题或参数更改;事实似乎并非如此。播放器选择可以是"Rock",而计算机选择可以是"Scissors"(两者都在调试期间验证(,但条件被视为true,控制台输出";画!(。整个代码如下所示:

array = ['Rock', 'Paper', 'Scissors'];
computerPlay();
userPlay();
evaluation();

function computerPlay() {
computerselection = array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
playerselection = prompt('Choose: Rock, Paper or Scissors', 'Choose it! NOW!!');
}

function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
} else if (
(playerselection == "rock" && computerselection == "scissors") ||          //All possible victories
(playerselection == "paper" && computerselection == "rock") || 
(playerselection == "scissors" && computerselection == "paper")) {
console.log("You win!");
} else {
console.log("You lose)");
}
}

是什么导致第一个if条件每次都评估为true,即使console.log(playerselection===computerselection(在调试期间评估为false?

一些提示。

在中

function evaluation(playerselection, computerselection) {

您有两个(区域设置(变量的声明,并使用它们进行比较。

稍后,您调用函数

evaluation()

没有一些参数,Javascript采用默认值undefined,就像所有其他没有值的声明变量一样。

这里的代码有一些变化:

  • 提前声明任何变量
  • 返回输入的数组的值
  • 在CCD_ 2中直接使用这两个值
  • 提前退出以防止嵌套的if。。。CCD_ 4结构
  • 防止使用不必要的括号,如果有疑问,请查看运算符的优先级

array中的数据应使用小写字母作为输入。

function computerPlay() {
return array[Math.floor(Math.random() * array.length)];
}
function userPlay() {
return (prompt('Choose: rock, paper or scissors') || '').toLowerCase();
}
function evaluation(playerselection, computerselection) {
if (playerselection === computerselection) {
console.log('Draw!');
return;
} 
if (
playerselection === "rock" && computerselection === "scissors" ||
playerselection === "paper" && computerselection === "rock" ||
playerselection === "scissors" && computerselection === "paper"
) {
console.log("You win!");
return;
}
console.log("You lose");
}
const
array = ['rock', 'paper', 'scissors'];
evaluation(userPlay(), computerPlay());

这里两个变量都不在全局范围内,因此在evaluate((函数内不可访问。这就是为什么evaluate((内部都是undefined,每次都满足if条件的原因。

尝试在全局范围内定义这两个变量,如下所示,并从evaluate((函数声明中删除参数。

let computerselection = "";
let playerselection = "";
function evaluation() {
//code stuff
}

相关内容

  • 没有找到相关文章

最新更新