Noobish JavaScript嵌套If-Else语句Help/Advice/Pointers/YouNameIt
我刚刚开始学习JavaScript(实际上是今天),非常感谢您对嵌套if-else语句的帮助。我想我应该编写一个简单的程序来练习,似乎我的if块中的每个if-else语句都会执行,而不管我输入了哪个参数。任何与当前问题无关的建议,甚至是你注意到的事情,都会受到赞赏。再次感谢。我的代码如下 编辑:我现在明白了,并且知道了我的错误。感谢大家这么快的评论和建议Noobish JavaScript嵌套If-Else语句Help/Advice/Pointers/YouNameIt,javascript,if-statement,Javascript,If Statement,我刚刚开始学习JavaScript(实际上是今天),非常感谢您对嵌套if-else语句的帮助。我想我应该编写一个简单的程序来练习,似乎我的if块中的每个if-else语句都会执行,而不管我输入了哪个参数。任何与当前问题无关的建议,甚至是你注意到的事情,都会受到赞赏。再次感谢。我的代码如下 编辑:我现在明白了,并且知道了我的错误。感谢大家这么快的评论和建议 var playerOne = prompt('Choose rock, paper, or scissors'); var playerT
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);
我建议您使用调试JavaScript代码。调试代码时,将alert()
更改为console.log()
,并可能将playerne/playerTwo
更改为简单字符串
(这并不完全符合您的问题,但如果您继续学习,这总体上是一个很好的建议。)我建议您使用它来调试JavaScript代码。调试代码时,将alert()
更改为console.log()
,并可能将playerne/playerTwo
更改为简单字符串
(这并不完全符合你的问题,但如果你继续学习,这总体上是一个很好的建议。)正如一些人所指出的,你的
if
陈述需要采用以下形式:
if (playerOne == 'paper' || playerOne == 'Paper')
或者更简洁地说:
if (playerOne.toLowerCase() == 'paper')
问题在于playerne==“paper”| |“paper”
将始终返回“Truthy”值(有关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
声明需要采用以下形式:
if (playerOne == 'paper' || playerOne == 'Paper')
或者更简洁地说:
if (playerOne.toLowerCase() == 'paper')
问题在于playerne==“paper”| |“paper”
将始终返回“Truthy”值(有关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);
其他评论和答案都很好,所以我不会重复他们所说的。但是你征求了我的建议,我的建议是不要从一开始就使用这么多
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);
你不能这样做
playeron=='rock'.'rock'.'rock'.
。你需要做playeron=='rock'.\124; playeron=='rock'.
你必须比较每种可能性:if(playerOne=='paper'.\124; playeron=='paper')
或者简单地说:if playerOne.toLowerCase()=='paper'
一个switch语句可以让这更干净一些…@bpeterson76也.toLowerCase()
哦,好吧,我已经看到了.toLowerCase()方法,我只是不知道你是否可以在JavaScript中使用它。我会试试看,谢谢。语句都在执行的原因是什么?你不能这样做playerne=='rock'| |'rock'
。你需要做playerne='rock'| playerne='rock'
你必须比较每种可能性:if(playerne='paper'| | playerne=='paper')
或者简单地说:如果playerne.toLowerCase()='paper'
一个switch语句可以让这更干净一些…@bpeterson76也.toLowerCase()
哦,好吧,我已经看到了.toLowerCase()方法,我只是不知道是否可以在JavaScript中使用它。我会试试看,谢谢。这些语句都在执行的原因是什么?