我目前正在学习Javascript并通过摇滚,剪刀,纸质教程。根据Codeacademy的相同教程,本网站上已经有一些查询。但是,我的查询是基于我的观点,所以我希望得到SO社区的一些反馈。
我的代码如下: -
var userChoice = prompt("Are you picking rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice < 0.34) {
computerChoice = "rock";
} else if(computerChoice <= 0.67) {
computerChoice = "paper";
} else {
computerChoice = "scissors";
}
console.log ("Computer picks" + " " +computerChoice);
var compare = function (choice1, choice2) {
if (choice1 === choice2) {
console.log ("You're both psychic. It's a tie!");
}
if (choice1=="rock") {
if (choice2 =="scissors") {
console.log ("Rock wins. You bad boy, you.");
}
if (choice2=="paper") {
console.log ("Paper wins. You noob") ;
}
}
if (choice1=="paper") {
if (choice2=="rock") {
console.log ("Paper wins. You bad boy, you.");
}
if (choice2=="scissors") {
console.log ("Scissors wins. You noob.") ;
}
}
if (choice1=="scissors") {
if (choice2=="rock") {
console.log ("Rock wins, you noob");
}
if (choice2=="paper") {
console.log ("Scissors wins. You bad boy, you.");
}
}
};
compare (userChoice,computerChoice);
我一直认为在使用条件时,它应该只是以下两种情况之一:
if
就好了。if
并以else
或 if
,else if
等结束以else
结尾。 因此,我最初在第二个嵌套的条件语句else
中使用了if (choice2=="paper")
。然后意识到逻辑是错误的,因为它打印了那个字符串,如果它是一个平局。
所以我想到了它,并意识到如果我使用if
而不是其他,它会起作用。它确实有效。但是,我只是不确定我的代码是错误的......还是不太理想。是吗?
此外,为了让它看起来更好(并且不仅仅是if
),我正在考虑使用if
替换if (choice1=="paper")
中的else if
。但是,我不知道如何结束下一个条件 - if (choice1=="scissors") {
。你会怎么做?
原谅长期的疑问 - 我只是想确保我理解得很好。
由于
答案 0 :(得分:2)
这是完全代码风格,所以你应该争取'干净的代码'。
最天真的选择是使用开关。例如:
var compare = function (choice1, choice2) {
switch(true){
case choice1 === choice2:
console.log ("You're both psychic. It's a tie!");
break;
case choice1 === "rock":
if(choice2 === "scissors"){
console.log ("Rock wins. You bad boy, you.");
} else{
console.log ("Paper wins. You noob") ;
}
break;
case choice1 === "paper":
if (choice2=="rock") {
console.log ("Paper wins. You bad boy, you.");
} else{
console.log ("Scissors wins. You noob.") ;
}
break;
case choice1 === "scissors":
if (choice2=="rock") {
console.log ("Rock wins, you noob");
} else{
console.log ("Scissors wins. You bad boy, you.");
}
break;
}
};
这只是一种方法。无论你选择什么,你都应该尝试使代码更清晰,更优雅。
此版本可能看起来更好:
var compare = function(choice1, choice2){
var options = ['rock','paper','scissors'];
var result = options.indexOf(choice1) - options.indexOf(choice2);
switch(result){
case 1:
case -2:
//choice1 wins
break;
case 0:
//tie
break;
case -1:
case 2:
//choice2 wins
break;
}
}
但是这个版本并没有立即被理解 - 因此有一个比这个和第一个更好的解决方案 - 一个更清晰且更容易让读者理解的解决方案 - 你应该试着找到一个。< / p>
答案 1 :(得分:0)
if(choice1 == choice2){
console.log ("You're both psychic. It's a tie!");
}
if(choice1 == "rock"){
if(choice2 == "scissors"){
console.log ("Rock wins. You bad boy, you.");
}
else {
console.log ("Paper wins. You noob") ;
}
}
...
假设choice1
和choice2
都是"rock"
,该函数会检查if(choice1 == choice2)
。这是事实,所以它会打印'tie'消息。
因为下一个条件也是if,所以它会检查choice1
是否为"rock"
。它是,因此它进入嵌套块,检查choice2
是否是“剪刀” - 它不是,因此它移动到else
块,并打印'纸张获胜'消息。
当它是平局时,choice1 == choice2
你真的不需要进一步检查。只有在不满足之前的条件时才会检查else if
和else
条件。
所以你可以把它改成:
if(choice1 == choice2){
console.log ("You're both psychic. It's a tie!");
}
else if(choice1 == "rock"){
if(choice2 == "scissors"){
console.log ("Rock wins. You bad boy, you.");
}
else {
console.log ("Paper wins. You noob") ;
}
}
else if(choice1 == "paper"){
...
}
else{ //choice1 == "scissors"
...
}
您还可以使用return
语句尽早中断函数。或者,正如Etai建议的那样,您可以使用switch
来检查条件。
答案 2 :(得分:0)
绝对使用else if,以便第二个条件测试仅在第一个为假的情况下运行
if ('hi' === 'hi) {
console.log('true');
} else{
console.log('this will never log')
}
也可以用三元运算符编写:
'hi' === 'hi' ? console.log('true') : console.log('this will never log');
替代三元选项 -
console.log('hi' === 'hi' ? 'true' : 'this will never log');