2016-08-12 70 views
1

一次和一段时间我看到和尝试,如果这样的语句来使用:简化的if语句如何在javascript中工作?

var boo = true; 

if(boo) 
console.log("a"); 

,而不是:

var boo = true; 

if(boo == true){ 
console.log("a"); 
}else{ 
console.log("not true"); 
} 

有没有办法有一个“其他”我的第一个switch语句?编译器如何知道何时停止?它是否在换行后执行条件逻辑?

+0

[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

回答

8

if之后是一个声明。一个block(这是通常惯用那里使用)只是一种语句,包装了一组其他语句。

有没有办法让我的第一个switch语句有一个“else”?

同样是else

if (1) 
    something(); 
else 
    something_else(); 

真正的编译器如何知道何时停止?

它允许一个语句。

它是否在换行符后执行条件逻辑?

不,一个声明。线路中断仅触发ASI

+0

仍然缺少(foo )vs(foo == true)的解释。 ;) – epascarello

+0

谢谢,现在我明白了 –

1

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条款,以及双方的ifelse有复合语句打在正式语法的单个语句的作用。

至于解析器是如何理解的,那么这是一个很大的话题。只要说编程语言的设计尽可能的明确,那么解析程序原始文本的代码就可以尽可能简单。当然,就像任何事情一样,没有这样的设计是完美的,特别是JavaScript具有令人惊讶的难以解析的语法特征。然而,我们在这里谈论的不是其中之一。围绕复合语句的{ }包装的整个目的是给解析器一个清晰的信号:这里有一个复合语句

+0

[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block)称它为块语句。复合语句似乎更具描述性。 – 4castle

+0

@ 4castle谢谢,我会编辑它。我有一个心理阻止记住适当的术语。 – Pointy

-2

如果(条件) 东西... 别的 东西...

if(true) 
alert("A") 
else 
alert("B") 

替代地

if(false) 
alert("A") 
else 
alert("B")