[英]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.