簡體   English   中英

Noobish JavaScript嵌套If-Else語句幫助/建議/指針/ YouNameIt

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

我剛開始學習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' playerOne == 'paper' || 'Paper'將始終返回“ Truthy”值(有關Truthy和Falsy值的更多詳細信息,請參見http://11heavens.com/falsy-and-truthy-in-javascript )。

順便說一句,雖然多個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);

通過使岩石/紙張/剪刀組合物化,該代碼使IMO更加易於閱讀。

其他評論和答案都很好,所以我不再重復他們的意見。 但是您要征求意見,我的建議是不要使用太多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為簡單字符串。

(這並不完全適合您的問題,但是,如果您繼續學習,總體而言是個不錯的建議。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM