我的问题是:我是JavaScript的新手,我试图理解“if {”和“else if {”语句之间的区别。到目前为止,我发现的唯一答案与稍后继承我的代码的人有关,显然没有人会继承我的类项目!我的具体问题是:
我正在使用codecademy进行摇滚纸剪刀游戏项目。我的Math.random()方法产生一个随机数。我首先实现了我的代码if(computerChoice< = 0.33){
及其替代方案:
if (computerChoice > 0.67){...... Which checked out and produced a viable answer.
在其建议中,它使用了else if语句。我的具体问题是在任何一种情况下我基本上都设定了低范围和高范围,而其他方面则代表中间。否则意味着不是先前的条件。但是,如果我的条件已经在逻辑上排除了前一个答案(如果替代方案中必须在其他方面被逻辑排除),那究竟是什么区别以及为什么使用其他if / when如果有必要呢?
我的代码如下:
选项一(否则如果):
var userChoice = prompt("do you want rock paper or scissors?");
var computerChoice = Math.random();
if (computerChoice <= 0.33){
computerChoice = "rock";
}
else if (computerChoice >= 0.67){
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
console.log(computerChoice);
选项二(2个如果):
var userChoice = prompt("do you want rock paper or scissors?");
var computerChoice = Math.random();
if (computerChoice <= 0.33){
computerChoice = "rock";
}
if (computerChoice >= 0.67){
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
console.log(computerChoice);
答案 0 :(得分:3)
if-else if-else逻辑比第二个示例更优雅,因为它将在正确赋值后停止评估条件。
如果computerChoice为0.25,请考虑第二种情况(如果没有其他情况)将如何工作。第一个if条件将评估为true,而computerChoice将被重新分配为“rock”。然而,不是考虑自己完成,而是继续逻辑,并检查computerChoice&gt; = 0.67。由于computerChoice现在是“摇滚”,解释器将尝试将其转换为数值。由于摇滚不会转换,我的猜测是你的逻辑意志,现在,按预期工作。
但是,考虑一种情况,您决定将实体(岩石,纸张和剪刀)定义为对象,并使用该对象的索引作为处理的输出。例如:
var myentities =
{
1: { name: "rock", image_url: "..." },
2: { name: "paper", image_url: "..." },
3: { name: "scissors", image_url: "..." }
};
并且假设您还决定停止使用对象的名称,而是使用其ID。在这种情况下,您的第一个if会将值1分配给computerChoice - 然后第二个if将检查是否1> = 0.67。结果,你的代码会(非常无辜地)100%的时间选择纸张,让你在很短的时间内感到困惑。
故事的道德:不必要的评估永远不会帮助你并且可能会伤害你。
答案 1 :(得分:1)
如果您正在检查同一变量的不同条件(或类似的东西),那么否则更快。如果它与条件匹配,则执行,然后在语句中完成。一大堆if语句意味着代码必须遍历其中的每一个,无论它是否找到第一个是真的。但请注意,使用'else if',您必须只查找其中一个条件才能匹配。如果您希望在此之后仍然检查任何内容,则必须是另一个“if”语句。
答案 2 :(得分:0)
但是,如果我的条件暂时已经逻辑上排除了之前的答案(无论如何必须在其他方面被排除在其他地方),究竟是什么区别以及为什么使用其他if / when如果有必要呢?
=&GT;没有,但是如果您在&#34;逻辑排除&#34;中出错,则else语句强制执行它。
即使它超出了你的问题的范围,也值得注意的是,如果&#34;用JavaScript构造。当你写:
if (...) {
} else if (...) {
}
你基本上做的是:
if (...) {
} else {
if (...) {
}
}
它的工作原理是因为你可以在else关键字之后传递任何语句。见http://www.ecma-international.org/ecma-262/5.1/#sec-12.5: - )
if (weight <= 130) {
fighter = "lightweight";
} else if (weight >= 205) {
fighter = "heavyweight";
} else {
fighter = "middleweight";
}
,在javascript中,相当于:
if (weight <= 130) {
fighter = "lightweight";
} else {
if (weight >= 205) {
fighter = "heavyweight";
} else {
fighter = "middleweight";
}
}
在您的原始帖子选项2中,您执行以下操作:
if (computerChoice <= 0.33){
computerChoice = "rock";
}
if (computerChoice >= 0.67){
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
如果computerChoice是&lt; = 0.33,那么将会发生以下情况:
if (0.33 <= 0.33) ... // => computerChoice = "rock"
if ("rock" >= 0.67) ... else [THE ELSE PART IS EXECUTED!]
因此,计算机选择基本上是&#34;纸张#34;任何时候它应该是&#34;摇滚&#34;。你将拥有&#34; paper&#34; 67%的时间和&#34;剪刀&#34; 33%的时间!发生这种情况是因为当您尝试比较不同类型的值时,Javascript不会抛出错误(例如,此处为字符串,&#34;摇滚&#34;,以及数字&#34; 0.67&#34 ;;而不是它试图通过一些神奇的强制规则(http://webreflection.blogspot.be/2010/10/javascript-coercion-demystified.html)转换相同类型的值,然后愉快地回答&#34;假!&#34;。作为一个数学专业,我可能会因为说到期而吓到你对于那些强制规则,你可以用javascript证明,这是真的=假......
PS:我刚才注意到Kevin Nielsen比我更好地解释了它。你走了!