嵌套 if 语句中的 else 语句。这段代码如何知道要执行哪个 else 语句?

else statement within nested if statements. How does this code know which else statement to execute?

我得到了嵌套的 if 循环(与使用 && 运算符相同),但是这里的代码如何知道在没有条件的情况下执行哪些条件并且只是背靠背 else 语句?其中之一在嵌套的 if 语句中。我可以说这显然就是为什么它会这样工作,我只是不明白如何。此外,我知道如何以几种更具可读性的方式编写它来测试多个条件。请在这里解释这段代码发生了什么。它怎么知道输出 "You are too old" 或 "You are too young?"

var age = prompt("Please enter Your age here :");
var min_age=18;
var max_age=40;

if(age>=min_age){
 if(age<=max_age){
   console.log("You meet the requirements for this competition");
 }else{
  console.log("You are too old");
 }
}else{
 console.log("You are too young");
}

首先,让我们缩进您的代码。

var age = prompt("Please enter Your age here :");
var min_age = 18;
var max_age = 40;

if (age >= min_age)
{
    if (age <= max_age)
    {
        console.log("You meet the requirements for this competition");
    }
    else
    {
        console.log("You are too old");
    }
}
else
{
    console.log("You are too young");
}

出发..

var age = prompt("Please enter Your age here :");

假设你在提示框中输入21,那么age=21

我们初始化

var min_age = 18;
var max_age = 40;

现在我们来看第一个if条件。

 if (age >= min_age)

如果替换这些值,则转换为

if (21 >= 18)

这是真的,因此我们进入 if 块而不是 else。 下一行是。

 if (age <= max_age)

这转换为

 if (21 <= 40)

考虑到这也是事实,我们打印您符合本次比赛的要求

最重要的收获是缩进代码,剩下的就变得非常简单。

括号{}设置限制。

尝试用伪代码思考,超越角色,思考正在发生的事情。

阅读顺序:

If you are old enough
  If your are not too old 
    'You meet the requirements for this competition'
  OTHERWISE
    'You are too old'
  END
OTHERWISE
  'You are too young'
END

请注意缩进如何帮助查看条件的限制。每个缩进部分都可以分开。

if-then-else 歧义由来已久。所有语言都通过定义 else 将匹配第一个 if 来解决它。所以:

if (a)
    if (b)
        x = 1;
else
    x = 2;

解析为:

if (a) {
    if (b) {
        x = 1;
    }
    else {
        x = 2;
    }
}

根据 Nisar 的要求编辑

if语句定义为:

if (<condition>) <statement> [else <statement>]

这意味着上面的一个<statement>也可能是一个if语句。因此,例如:

if (<condition>) if (<condition>) [else <statement>] [else <statement>]

由于每个 else 部分都是可选的,编译器无法知道它何时看到 else 部分属于哪个 if。为了解决语言 定义 的问题,即 else 始终匹配前面的第一个 if.

只有 3 个选项

  • 太年轻
  • 正确年龄
  • 太老了

首先检查 - 这个人是否足够大?

if(age>=min_age)

第二次检查 - 这个人是不是太老了?

if(age<=max_age)

此后唯一可能的选项是 FALSE :

  • 太老了