为if else
正式的语法是这样的:
if
声明else
声明
通用的 “声明” 有可能是这样一个简单的赋值表达式,单函数调用或包含在{ }
中的一个或多个语句的块。因此,{ }
不是if
语句的句法结构的一部分。它们是一般和常用的复合说明的一部分。 (JavaScript可能会正式称呼其他东西,但这是一件常见的事情,但名称并不重要编辑评论指出它正式是一个“块声明”,但我认为“复合”更具描述性, )一个大括号的复合语句包含任意数量的其他语句,但从外部它只包含一个语句。
的if
语句的else
部分是可选的,所以
if
声明
是没关系。
因此,在你的例子:
if (boo)
console.log(a);
的console.log(a);
是单个语句。在第二个例子:
var boo = true;
if(boo == true){
console.log("a");
}else{
console.log("not true");
}
有是一个else
条款,以及双方的if
和else
有复合语句打在正式语法的单个语句的作用。
至于解析器是如何理解的,那么这是一个很大的话题。只要说编程语言的设计尽可能的明确,那么解析程序原始文本的代码就可以尽可能简单。当然,就像任何事情一样,没有这样的设计是完美的,特别是JavaScript具有令人惊讶的难以解析的语法特征。然而,我们在这里谈论的不是其中之一。围绕复合语句的{ }
包装的整个目的是给解析器一个清晰的信号:这里有一个复合语句。
[truthy](https://developer.mozilla.org/en- US/docs/Glossary/Truthy)和[if/else](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) – epascarello