2016-08-12 2 views
1

Einmal und eine Weile ich sehe und versuchen, ein verwenden, wenn Anweisung wie folgt:Wie funktionieren vereinfachte if-Anweisungen in JavaScript?

var boo = true; 

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

im Gegensatz zu:

var boo = true; 

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

Gibt es eine Möglichkeit, einen „anderen“ mit meiner ersten switch-Anweisung haben ? Wie weiß der Compiler überhaupt, wann er aufhören soll? Tut es die bedingte Logik nach einem Zeilenumbruch?

+0

[truthy] (https://developer.mozilla.org/en- US/docs/Glossar/Truthy) und [if/else] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) – epascarello

Antwort

8

Auf eine if folgt nur eine Aussage. Eine block (die ist in der Regel und idiomatisch dort verwendet) ist nur eine Art von Anweisung, die eine Gruppe von anderen Anweisungen umschließt.

Gibt es eine Möglichkeit, ein "else" mit meiner ersten switch-Anweisung zu haben?

Das gleiche gilt für else

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

Wie weiß der Compiler selbst wenn zu stoppen?

Erlaubt eine einzelne Aussage.

Führt es die bedingte Logik nach einem Zeilenumbruch?

Nein, eine Aussage. Der Zeilenumbruch dort löst nur ASI aus.

+0

Noch fehlt (foo) vs (foo == wahr) Erklärung. ;) – epascarello

+0

Danke, jetzt verstehe ich –

1

Die Syntax für if else ist so etwas wie:

ifAnweisungelseAnweisung

Die generische "Aussage" es so etwas wie eine einfache Zuordnung Ausdruck sein kann, eine einzige Funktionsaufruf oder Block einer oder mehrerer der in { } enthaltenen Anweisungen. Somit sind die { } nicht Teil der syntaktischen Struktur der if-Anweisung. Sie sind Teil der allgemeinen und oft verwendeten zusammengesetzte Aussage. (JavaScript kann dies formal als etwas anderes bezeichnen; es ist jedoch eine gewöhnliche Sache und der Name ist nicht so wichtig. bearbeiten Ein Kommentar merkt an, dass es formal eine "Block-Aussage" ist, aber ich denke, "Verbindung" ist beschreibender. ll lassen es in.) Eine geschweifte zusammengesetzte Aussage enthält eine beliebige Anzahl von anderen Aussagen, aber von außen umfasst es nur eine Aussage.

Der else Teil der if Anweisung optional ist, so

ifAnweisung

ist auch in Ordnung. So

, in Ihre Beispiele:

if (boo) 
    console.log(a); 

Die console.log(a); ist die einzige Erklärung. Im zweiten Beispiel:

var boo = true; 

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

es ist eine else Klausel, und sowohl die if und die else haben zusammengesetzte Anweisungen, die Rolle der einzelnen Anweisung in der formalen Syntax zu spielen.

Wie genau der Parser das versteht, das ist ein großes Thema. Es genügt zu sagen, dass Programmiersprachen so eindeutig wie möglich gestaltet sind, so dass der Code zum Parsen des Rohtextes eines Programms so einfach wie möglich sein kann. Natürlich ist, wie bei allem, kein solches Design perfekt, und insbesondere JavaScript weist Syntaxmerkmale auf, die überraschend schwer zu analysieren sind. Wovon wir hier reden, gehört jedoch nicht dazu. Der ganze Zweck des { } Wrappers um eine zusammengesetzte Anweisung besteht darin, dem Parser ein klares Signal zu geben: Hier kommt eine zusammengesetzte Aussage.

+0

[MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block) nennt es eine Block-Anweisung. Die zusammengesetzte Anweisung scheint jedoch beschreibender zu sein. – 4castle

+0

@ 4castle danke, ich werde das bearbeiten. Ich habe eine mentale Blockade gegen das Erinnern an die entsprechende Terminologie. – Pointy

-2

if (Bedingung) stuff ... sonst stuff ...

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

alternativ

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