Noobish JavaScript嵌套If Else语句帮助/建议/指针/YouNameIt

Noobish JavaScript Nested If-Else Statement Help/Advice/Pointers/YouNameIt

本文关键字:建议 指针 YouNameIt 帮助 语句 JavaScript 嵌套 If Else Noobish      更新时间:2023-09-26

我刚刚开始学习JavaScript(实际上是今天),我非常感谢嵌套if-else语句的帮助。我想我应该写一个简单的程序来练习,我的if块中的每一个if-else语句似乎都会执行,而不管我输入了哪个参数。任何你注意到的与当前问题无关的指针甚至东西都会受到赞赏。再次感谢。我的代码在下面。

编辑:我现在明白了,并学会了我的错误。感谢所有这么快发表评论并给出建议的人。

var playerOne = prompt('Choose rock, paper, or scissors'); 
var playerTwo = prompt('Choose rock, paper, or scissors'); 
var fight = function (playerOne, playerTwo)
{ 
    if( playerOne == 'rock' || 'Rock')
    { 
        if (playerTwo == 'paper' || 'Paper')
        {
            alert('Player Two Wins!');
        }
        else if (playerTwo == 'rock' || 'Rock')
        {
            alert('Tie!');
        }
        else
        {
            alert('Player One wins!');
        }
    }
        if(playerOne == 'paper' || 'Paper')
        { 
            if (playerTwo == 'paper' || 'Paper')
            {
                alert('Tie!');
            }
            else if (playerTwo == 'rock' || 'Rock')
            {
                alert('Player One Wins!'); 
            }
            else 
            {
                alert('Player Two  wins!');
            }
        }
        if (playerOne == 'scissors' || 'Scissors')
        {
             if (playerTwo == 'paper' || 'Paper')
             {
                alert('Player One Wins!');
             }
            else if (playerTwo == 'rock' || 'Rock')
            {
                alert('Player Two Wins!');
            }
            else
            {
                alert('Tie!');
            }
        }
};
fight(playerOne, playerTwo); 

正如一些人所指出的,您的if语句需要采用以下形式:

if (playerOne == 'paper' || playerOne == 'Paper')

或者更简洁的:

if (playerOne.toLowerCase() == 'paper')

问题是playerOne == 'paper' || 'Paper'将始终返回"Truthy"值(请参阅http://11heavens.com/falsy-and-truthy-in-javascript有关Truthy和Falsy价值观的更多详细信息)。

顺便说一句,虽然多个if语句绝对没有错,但如果我对这个练习进行编码,我的方式将涉及更少的if语句(看起来有点像:

var playerOne = prompt('Choose rock, paper, or scissors');
var playerTwo = prompt('Choose rock, paper, or scissors');
var fists = {
    "rock": {
        "beats": "scissors",
        "loses": "paper"
    },
    "paper": {
        "beats": "rock",
        "loses": "scissors"
    },
    "scissors": {
        "beats": "paper",
        "loses": "rock"
    }
}
var fight = function (playerOne, playerTwo) {
    playerOne = playerOne.toLowerCase();
    playerTwo = playerTwo.toLowerCase();
    if (fists[playerOne] === undefined || fists[playerTwo] === undefined) {
        alert('Someone threw an unknown fist!');
    } else if (fists[playerOne].beats === playerTwo) {
        alert('Player One wins!');
    } else if (fists[playerTwo].beats === playerOne) {
        alert('Player Two Wins!');
    } else {
        alert('Tie!');
    }
};
fight(playerOne, playerTwo);

通过将岩石/纸张/剪刀组合物化,代码变得更易于阅读。

其他评论和答案都很棒,所以我不重复他们说的。但你征求了我的建议,我的建议是一开始就不要使用这么多if语句。编程的很大一部分是学习如何减少不必要或重复的代码。像对象和数组这样的数据结构对此很好:

var win_conditions = {    //simple object showing which hands beat which
    'rock': 'scissors',
    'paper': 'rock',
    'scissors': 'paper'
}
var fight = function(p1, p2) {
    var result;
    if (!win_conditions.hasOwnProperty(p1) || !win_conditions.hasOwnProperty(p2)) {
        result = false;       //error! user typed something invalid
    } else {
        if (win_conditions[p1] == p2) {
            result = 'Player One wins!';
        } else if (win_conditions[p2] == p1) {
            result = 'Player Two wins!';
        } else {
            result = 'Tie!';
        }
    }
    return result;
}
var fight_result = false;
var prompt_text = 'Choose rock, paper, or scissors';
var playerOne = prompt(prompt_text); 
var playerTwo = prompt(prompt_text); 
//keep asking until the user types a valid option
while (!fight_result) {
    fight_result = fight(playerOne.toLowerCase(), playerTwo.toLowerCase());
}
alert(fight_result);

我建议您使用FireBug来调试JavaScript代码。调试代码时,将alert()更改为console.log(),可能将playerOne/playerTwo更改为简单字符串。

(这并不完全符合你的问题,但如果你继续学习,这是一个很好的建议。)