Składnia „elseif” w JavaScript

Odpowiedzi:

507

Kod JavaScript ifif ma format „else if”, np .:

if (condition) {

} else if (other_condition) {

} else {

}
Jeff
źródło
28
Kiedy ludzie zadają takie pytania ... Myślę, że to pokazuje fundamentalne nieporozumienie. Z ifi elsenaprawdę nie ma takiej potrzeby elseif.
mpen
14
@ Mark, zgadzam się ... ale czasami mnie to psuje, ponieważ jestem przyzwyczajony do języków, które mają inny. Wiem, że jest identyczny, ale zastanawiam się, jaki jest powód, dla którego javascript go pomija. Cieszę się jednak, że nie użyli elifa, ponieważ to po prostu źle :)
Jay K
16
@JayK: Haha .. PHP ma elseif, Perl ma elsif(tak myślę), a Python elif... z początku mnie to zirytowało, ale ... Myślę, że to trochę urocze. Służy to jednak niewielkiemu celowi w Pythonie i PHP, ponieważ inaczej nie działałoby z ich składnią dwukropka.
mpen
6
@ Mark To więcej pokazuje nieporozumienie dotyczące braketingu. Wsporniki nie są potrzebne do if/ elsebloków, ale ludzie są zachęcani do korzystania z nich, więc rozumiem, dlaczego dla nowego użytkownika wygląda to nieprawidłowo.
46
@ Mark Twierdzenie, że nigdy nie ma powodu, aby używać „else if” jest niepoprawne. W przeciwnym razie, jeśli instrukcje są podobne do używania „przełącznika”, pozwoli to jednak na bardziej szczegółowe porównania. Switch oczywiście pozwala jedynie na bardzo proste porównania. Więc tak, zdecydowanie istnieją dobre powody, aby używać innego jeśli.
jolsen,
49

Po prostu dodaj spację:

if (...) {

} else if (...) {

} else {

}
jMyles
źródło
33

Możesz użyć tej składni, która jest funkcjonalnie równoważna:

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

Działa to, ponieważ każdy conditionjest w pełni oceniany przed porównaniem z switchwartością, więc pierwszy, który ocenia, truebędzie zgodny i jego gałąź zostanie wykonana. Kolejne oddziały nie zostaną wykonane, pod warunkiem, że pamiętasz o użyciubreak .

Zauważ, że stosowane jest ścisłe porównanie, więc gałąź, która conditionjest jedynie „prawdomówna”, nie zostanie wykonana. Można rzucić wartość truthy się truez podwójnej negacji: !!condition.

Tamlyn
źródło
To nie jest funkcjonalnie równoważny AFAIK. To, co możesz umieścić w tych warunkach, jest znacznie bardziej ograniczone i switch (true)nawet nie ma sensu.
zwolnij
2
Przyznaję, że na początku wygląda to dziwnie, ale jest równoważne. Warunkiem może być cokolwiek lubisz (w tym wywołania funkcji lub cokolwiek innego), a jeśli to oceni, trueto przypadek zostanie spełniony - dokładnie jak else if.
Tamlyn
5
Och, widzę, co teraz robisz. To naprawdę cholernie sprytne. (I dodał paragraf wyjaśniający, jak to działa, tak, że mogę wycofać moją downvote.)
Zwol
1
To bardzo proste, czyste i eleganckie rozwiązanie dla list stanów z więcej niż 1 warunkiem „else if”
Steve Goossens
4
Nie do końca równoważne, jeśli warunki nie zwracają wartości logicznych, np. if([]) alert('a')Generuje ostrzeżenie, ale nie zwraca switch(true){case []:alert('a')}. Jest tak, ponieważ []jest to prawdziwa wartość, ale nie równa true, jak wyjaśniono w tym wydaniu @zwol .
Oriol
13

Właściwie, technicznie przy prawidłowym wcięciu byłoby to:

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

Nie ma else if, ściśle mówiąc.

(Aktualizacja: Oczywiście, jak wskazano, powyższe nie jest uważane za dobry styl.)

skube
źródło
1
Możesz i powinieneś to napisać if (condition1) { ... } else if (condition2) { ... } else { ... }.
zwolnij
4
Zasadniczo podczas używania else iffaktycznie pomijasz opcjonalny blok {...}. Odniosłem się do niego na podstawie EMCAScript i MDN ..
skube
13
Jeśli chodzi o formalną gramatykę języka, masz rację, ale twoja odpowiedź może dać ludziom błędne wrażenie, że else { if ... }jest dobrym stylem.
Zwol
1
Co powiedział zwolnienie. Jest to, co miałeś na myśli (skube). A potem jest to, co powiedziałeś.
Gerard ONeill
6
if ( 100 < 500 ) {
   //any action
}
else if ( 100 > 500 ){
   //any another action
}

Łatwa w użyciu przestrzeń

IdemeNaHavaj
źródło
2

Instrukcje warunkowe służą do wykonywania różnych działań w oparciu o różne warunki.

Służy ifdo określania bloku kodu do wykonania, jeśli określony warunek jest spełniony

Służy elsedo określania bloku kodu do wykonania, jeśli ten sam warunek jest fałszywy

Służy else ifdo określania nowego warunku do przetestowania, jeśli pierwszy warunek jest fałszywy

AA Noman
źródło
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
źródło
0

Brakuje spacji między elseiif

Powinno być else ifzamiastelseif

if(condition)
{

} 
else if(condition)
{

}
else
{

}
kodemirror
źródło