Syntax "elseif" in JavaScript

271

Ist das richtig?

if(condition)
{

} 
elseif(condition)
{

}
else
{

}
Hari Gillala
quelle

Antworten:

507

Das elseif von JavaScript hat das Format "else if", z.

if (condition) {

} else if (other_condition) {

} else {

}
Jeff
quelle
28
Wenn Leute solche Fragen stellen ... Ich denke, das zeigt ein grundlegendes Missverständnis. Mit ifund elsegibt es wirklich keine Notwendigkeit elseif.
Mpen
14
@ Mark, ich stimme zu ... aber es bringt mich manchmal durcheinander, weil ich an Sprachen gewöhnt bin, die ein elseif haben. Ich weiß, dass es identisch ist, aber ich frage mich, warum Javascript es auslässt. Ich bin jedoch froh, dass sie elif nicht benutzt haben, weil das einfach falsch ist :)
Jay K
16
@ JayK: Haha ... PHP hat elseif, Perl hat elsif(glaube ich) und Python hat elif... diese Art hat mich zuerst geärgert, aber ... ich denke, es ist irgendwie süß. In Python und PHP erfüllt es jedoch einen geringfügigen Zweck, da es sonst mit der Doppelpunktsyntax nicht funktionieren würde.
Mpen
6
@Mark Es zeigt mehr ein Missverständnis der Klammerung. Klammern sind für if/ elseblocks nicht erforderlich , aber die Benutzer werden aufgefordert, sie zu verwenden, damit ich verstehen kann, warum dies für einen neuen Benutzer falsch aussieht.
46
@Mark Zu behaupten, dass es nie einen Grund gibt, "else if" zu verwenden, ist falsch. Andernfalls können Anweisungen, die der Verwendung von "switch" ähneln, detailliertere Vergleiche ermöglichen. Der Schalter erlaubt natürlich nur sehr einfache Vergleiche. Also ja, es gibt definitiv gute Gründe für die Verwendung von else if.
Jolsen
49

Fügen Sie einfach ein Leerzeichen hinzu:

if (...) {

} else if (...) {

} else {

}
jMyles
quelle
33

Sie können diese Syntax verwenden, die funktional äquivalent ist:

switch (true) {
  case condition1:
     //e.g. if (condition1 === true)
     break;
  case condition2:
     //e.g. elseif (condition2 === true)
     break;
  default:
     //e.g. else
}

Dies funktioniert, da jeder conditionvor dem Vergleich mit dem switchWert vollständig ausgewertet wird, sodass der erste Wert, der ausgewertet truewird, übereinstimmt und sein Zweig ausgeführt wird. Nachfolgende Verzweigungen werden nicht ausgeführt, sofern Sie daran denken, sie zu verwendenbreak .

Beachten Sie, dass ein strikter Vergleich verwendet wird, sodass ein Zweig, der conditionlediglich "wahr" ist, nicht ausgeführt wird. Sie können einen Wahrheitswert truemit doppelter Negation umsetzen : !!condition.

Tamlyn
quelle
Dies ist keine funktional äquivalente AFAIK. Was Sie in die Bedingungen setzen können, ist viel begrenzter und switch (true)macht nicht einmal Sinn.
zwol
2
Ich gebe zu, es sieht auf den ersten Blick komisch aus, aber es ist gleichwertig. Die Bedingung kann beliebig sein (einschließlich Funktionsaufrufe oder was auch immer), und wenn sie ausgewertet wird, trueist dieser Fall erfüllt - genau wie else if.
Tamlyn
5
Oh, ich verstehe, was du jetzt machst. Das ist verdammt schlau. (Ich habe einen Absatz hinzugefügt, in dem erklärt wird, wie es funktioniert, damit ich meine Ablehnung zurückziehen kann.)
zwol
1
Dies ist eine sehr einfache, saubere und elegante Lösung für Bedingungslisten mit mehr als 1 "else if" -Bedingung
Steve Goossens
4
Nicht vollständig gleichwertig, wenn die Bedingungen keine Booleschen Werte zurückgeben, z. B. if([]) alert('a')die Warnung erzeugen, dies jedoch nicht tun switch(true){case []:alert('a')}. Das liegt daran, dass []es sich um einen wahrheitsgemäßen Wert handelt, der jedoch nicht gleich ist true, wie @zwol in dieser Bearbeitung erklärt hat .
Oriol
13

Eigentlich wäre es technisch gesehen, wenn es richtig eingerückt wäre:

if (condition) {
    ...
} else {
    if (condition) {
        ...
    } else {
        ...
    }
}

else ifGenau genommen gibt es keine .

(Update: Natürlich wird das oben Gesagte, wie bereits erwähnt, nicht als guter Stil angesehen.)

Skube
quelle
1
Sie können und sollten dies schreiben if (condition1) { ... } else if (condition2) { ... } else { ... }.
zwol
4
Im Wesentlichen lassen Sie bei der Verwendung else ifden optionalen Block weg {...}. Ich bezog mich auf EMCAScript und MDN ..
Skube
13
In Bezug auf die formale Grammatik der Sprache sind Sie richtig, aber Ihre Antwort könnte den Menschen den falschen Eindruck vermitteln, dass dies else { if ... }ein guter Stil ist.
zwol
1
Was zwol gesagt hat. Es gibt das, was du (skube) gemeint hast. Und dann gibt es das, was du gesagt hast.
Gerard ONeill
6
if ( 100 < 500 ) {
   //any action
}
else if ( 100 > 500 ){
   //any another action
}

Einfach, Platz nutzen

IdemeNaHavaj
quelle
2

Bedingte Anweisungen werden verwendet, um verschiedene Aktionen basierend auf verschiedenen Bedingungen auszuführen.

Verwenden Sie ifdiese Option, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn eine bestimmte Bedingung erfüllt ist

Verwenden Sie elsediese Option, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn dieselbe Bedingung falsch ist

Verwenden Sie else ifdiese Option, um eine neue zu testende Bedingung anzugeben, wenn die erste Bedingung falsch ist

AA Noman
quelle
1
x = 10;
if(x > 100 ) console.log('over 100')
else if (x > 90 ) console.log('over 90')
else if (x > 50 ) console.log('over 50')
else if (x > 9 ) console.log('over 9')
else console.log('lower 9') 
zloctb
quelle
0

Ihnen fehlt ein Leerzeichen zwischen elseundif

Es sollte else ifstatt seinelseif

if(condition)
{

} 
else if(condition)
{

}
else
{

}
Codespiegel
quelle