基本JavaScript if与else if

基本JavaScript if与else if,javascript,if-statement,conditional,Javascript,If Statement,Conditional,我的问题是:我是JavaScript新手,我试图理解“if{”和“else if{”语句之间的区别。到目前为止,我找到的唯一答案是与后来继承我的代码的人有关,显然没有人会继承我的类项目!我的问题是: 我正在codecademy上做石头剪纸游戏项目。我的Math.random()方法产生一个随机数。我首先实现了我的代码if(computerChoice,如果你正在检查同一变量的不同条件(或类似情况)then else-if更快。如果它匹配一个条件,它将执行,然后在语句中完成。一大堆if语句意味着代

我的问题是:我是JavaScript新手,我试图理解“if{”和“else if{”语句之间的区别。到目前为止,我找到的唯一答案是与后来继承我的代码的人有关,显然没有人会继承我的类项目!我的问题是:


我正在codecademy上做石头剪纸游戏项目。我的Math.random()方法产生一个随机数。我首先实现了我的代码if(computerChoice,如果你正在检查同一变量的不同条件(或类似情况)then else-if更快。如果它匹配一个条件,它将执行,然后在语句中完成。一大堆if语句意味着代码必须遍历其中的每一个,不管它是否发现第一个条件为真。但是请注意,使用“else-if”时,您必须只查找一个要匹配的条件。如果您想要要检查之后的任何内容,它必须是另一个“if”语句。

if-else-if-else逻辑比第二个示例更优雅,因为它将在正确赋值后停止计算条件

考虑如果computerChoice为0.25,您的第二个案例(无其他if)将如何工作。第一个if条件将评估为true,computerChoice将被重新分配到“rock”。但是,逻辑将继续,并检查computerChoice>=0.67。因为computerChoice现在是“rock”解释器将尝试将其转换为数值。由于rock不会转换,我猜您的逻辑将按预期工作

然而,考虑一种情况,你决定将你的实体——岩石、纸和剪刀——定义为一个对象,并使用该对象的索引作为处理的输出。例如:

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%的时间选择纸张,在短时间内让你大惑不解

这个故事的寓意是:不必要的评估永远不会帮助你,也可能伤害你

但是,如果我的第二个if条件已经在逻辑上排除了前面的答案(无论如何,在else-if备选方案中,必须在逻辑上排除该答案),那么到底有什么区别?如果需要,为什么使用else-if/何时使用else-if

=>无,但是如果您在“逻辑排除”中出错,else语句将强制执行该语句

即使它有点超出了您的问题范围,也值得注意的是JavaScript中没有“else if”构造

if (...) {

} else if (...) {

}
你基本上在做的是:

if (...) {

} else {
  if (...) {

  }
}
它之所以有效,是因为您可以在else关键字之后传递任何语句。请参阅:-)

更新1
if(重量=205){
战斗机=“重量级”;
}否则{
战斗机=“中量级”;
}
在javascript中,它相当于:

if (weight <= 130) {
  fighter = "lightweight";
} else {
  if (weight >= 205) {
    fighter = "heavyweight";
  } else {
    fighter = "middleweight";
  }
}
if(重量=205){
战斗机=“重量级”;
}否则{
战斗机=“中量级”;
}
}
更新2 在您的原始帖子选项2中,您可以:

if (computerChoice <= 0.33){
  computerChoice = "rock";
}

if (computerChoice >= 0.67){
 computerChoice = "scissors";
}
else {
  computerChoice = "paper";
}
if(computerChoice=0.67){
computerChoice=“剪刀”;
}
否则{
computerChoice=“纸张”;
}

如果computerChoice是你的第二个选择,它将永远不会产生“摇滚乐”如果他使用第二个值来保存所选实体的名称,那将是正确的——但一旦他给computerChoice分配了一个字符串值,所有后续的比较值都将返回false。@basilikum-我不明白,我尝试了两种方法,两种方法都随机多次生成了所有三个答案……两个if语句都不正确连接。因此,对于第一个
if
语句,您指定“rock”或不指定“rock”-这是两种可能性。在第二个if-else块中,您指定“剪刀”或“布”,但它肯定是其中之一。@KevinNielsen和if“所有后续比较都将返回false”然后出现
else
块并将值更改为“paper”。那么这就是说:当条件1不满足时,如果选项2…如果选项3…在这种情况下,既然已经跳过了条件1,那么它不会评估更多的if语句吗?换句话说,在这种情况下,如果考虑的第二个if语句已经排除了岩串,为什么不指定其他语句是多余的作为一个可能的答案?使用else{if{}会是什么情况那么?除非我不确定第一个if的结果会是什么?我不太确定你在这里的意思是什么?谢谢你的容忍!让我这样说:如果一个拳击手的体重超过或等于205磅,他就是一个重量级拳击手。如果他体重小于或等于130磅,他就是一个轻量级拳击手。如果他体重超过或等于其他任何东西,他就是一个中量级拳击手dle-weight。我们可以用“heavy>=205”“205>middle>130”和“light-oops我看不到你的评论的结尾。好吧,代替上一个else语句,你可以做”else if(x>130&&x<205)“从数学上讲,它将包含所有值,但要小心,javascript是动态键入的,因此如果出于某种随机原因,出现weight=“helloworld”(字符串),则它将不会传递任何if语句,并且将是“未定义的”.明白了吗?如果你愿意,我可以写一些例子是的!!!我想我需要的是一个例子,如果其他条件满足,而如果不满足…非常感谢!!所以如果我用else if检查结果,它将停止询问oce a条件是否满足?那么,如果只有在多个结果可能时才这样做?我终于理解了nd!一旦设置了var,其他问题就没有意义再问了!!灯泡!
if (...) {

} else {
  if (...) {

  }
}
if (weight <= 130) {
  fighter = "lightweight";
} else if (weight >= 205) {
  fighter = "heavyweight";
} else {
  fighter = "middleweight";
}
if (weight <= 130) {
  fighter = "lightweight";
} else {
  if (weight >= 205) {
    fighter = "heavyweight";
  } else {
    fighter = "middleweight";
  }
}
if (computerChoice <= 0.33){
  computerChoice = "rock";
}

if (computerChoice >= 0.67){
 computerChoice = "scissors";
}
else {
  computerChoice = "paper";
}
if (0.33 <= 0.33) ... // => computerChoice = "rock"

if ("rock" >= 0.67) ... else [THE ELSE PART IS EXECUTED!]