Basic JavaScript if vs. else if
Basic JavaScript if vs. else if
我的问题是:我是JavaScript的新手,我正在努力理解"if{"answers"else if{
我正在做codecademy上的岩石剪刀游戏项目。我的Math.random()方法生成一个随机数。我首先实现了我的代码if(computerChoice<=0.33){
其替代方案为:
if (computerChoice > 0.67){...... Which checked out and produced a viable answer.
然而,它在建议中使用了else-if语句。我的具体问题是,在这两种情况下,我基本上都设置了一个低范围和一个高范围,剩下的代表中间。Else表示不是以前的条件。但是,如果我对第二个if的条件已经在逻辑上排除了之前的答案(无论如何,必须在else-if选项中从逻辑上排除之前的答案),那么到底有什么区别,为什么要使用else-if/何时需要else-if?
我的代码如下:
选项一(否则):
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);
If else-If-else逻辑比第二个例子更优雅,因为它将在进行正确的赋值后停止计算条件。
考虑一下如果computerChoice为0.25,您的第二种情况(没有其他if)将如何工作。第一个if条件将评估为true,computerChoice将被重新分配给"rock"。然而,逻辑不会认为自己完成了,而是继续进行,并检查computerChoice是否>=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%地挑纸,在短时间内让你非常困惑。
这个故事的寓意是:不必要的评价永远不会帮助你,可能会伤害你。
如果您正在检查同一变量(或类似的变量)的不同条件,那么else-If会更快。如果它匹配一个条件,它就会执行,然后在语句中完成。一大堆if语句意味着无论第一个语句是否为真,代码都必须运行其中的每一个语句。不过要注意,对于"else-if",你一定只是在寻找匹配的条件之一。如果你希望它在那之后仍然检查任何内容,那么它必须是另一个"If"语句。
但是,如果我对第二个if的条件已经在逻辑上排除了之前的答案(无论如何,必须在else-if选项中从逻辑上排除之前的答案),那么到底有什么区别,为什么要使用else-if/何时需要else-if?
=>无,但是else语句会强制执行,以防您在"逻辑排除"中出错。
即使这有点超出了你的问题范围,也值得注意的是,JavaScript中没有"else-if"构造。当你写:
if (...) {
} else if (...) {
}
你基本上在做的是:
if (...) {
} else {
if (...) {
}
}
它之所以有效,是因为您可以在else关键字之后传递任何语句。看见http://www.ecma-international.org/ecma-262/5.1/#sec-12.5:-)
更新1
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
在你最初的帖子,选项2,你做:
if (computerChoice <= 0.33){
computerChoice = "rock";
}
if (computerChoice >= 0.67){
computerChoice = "scissors";
}
else {
computerChoice = "paper";
}
如果computerChoice为<=0.33,将会发生以下情况:
if (0.33 <= 0.33) ... // => computerChoice = "rock"
if ("rock" >= 0.67) ... else [THE ELSE PART IS EXECUTED!]
所以基本上电脑的选择将是"纸"任何时候它应该是"岩石"。67%的时间你会有"纸",33%的时间你有"剪刀"!之所以会发生这种情况,是因为当您尝试比较不同类型的值时,Javascript不会抛出错误(即这里的字符串"rock"和数字"0.67";相反,它试图通过一些神奇的强制规则转换同一类型的值(http://webreflection.blogspot.be/2010/10/javascript-coercion-demystified.html)然后愉快地回答"假的!"。作为一名数学专业的学生,我可能会说,由于这些胁迫规则,你可以用javascript证明true=false。。。
附言:我刚刚注意到Kevin Nielsen在上面的解释比我好得多。给你!
- 如何在ReactJS JSX中执行嵌套的if-else语句
- Javascript Return and if/else
- JavaScript if-else 速记错误
- 如何检查if/else语句中的随机条件
- 在javascript中创建数组,而不是if.else
- Javascript If else 只返回 TRUE 或只返回 FALSE
- jquery if else不返回警报消息
- 在Javascript中为if/else语句添加OR
- If Else Java Script HTML
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- geoTest函数-创建if/else语句
- JavaScript中的温度转换器(IF ELSE条件)
- Jquery/Javascript使用IF/ELSE语句更改img SRC
- 编写if-else语句的更好方法
- 在if/else语句中显示DIV
- PHP If Else-隐藏按钮
- JavaScript if/else未按预期操作
- if/else运算符未更改
- 名称不能以''jquery-if-else条件中的字符