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'
将始终返回"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
更改为简单字符串。
(这并不完全符合你的问题,但如果你继续学习,这是一个很好的建议。)
相关文章:
- 自动建议在我的搜索引擎上不起作用
- parse.com类中指针中的查询指针
- 需要如何让它发挥作用的建议
- 文本建议的超链接
- 建议将包含不同参数的内联JS转换为外部脚本
- 收集一段时间内的EMG数据.建议JS
- 为第一次尝试Javascript的经验丰富的开发人员提供建议
- 布局/结构建议
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 从下拉列表中搜索并建议关键字
- JavaScript-如何从谷歌自动执行API获得城市名称建议
- d3用时钟中的两个指针变换原点
- 关于使用.className的建议,目前还没有;我不能在我的圈子里工作
- WinJS AutoSuggestBox保留所选建议
- HTML文件中的智能Javascript建议在Visual Studio代码更新后没有日志程序工作
- 将Scope变量作为指针发送,并在控制器外部对其进行更改
- 按下回车键后阻止自动完成建议列表
- 将指针事件限制为SVG文本填充
- 如何通过“;函数指针“/事件转换为Polymer/HTML中的子元素
- Noobish JavaScript嵌套If Else语句帮助/建议/指针/YouNameIt