ChatGPT解决这个技术问题 Extra ChatGPT

"elseif" syntax in JavaScript

How can I achieve an elseif in a JavaScript condition?


m
mit

In JavaScript's if-then-else there is technically no elseif branch.

But it works if you write it this way:

if (condition) {

} else if (other_condition) {

} else {

}

To make it obvious what is really happening you can expand the above code using an additional pair of { and }:

if (condition) {

} else {

   if (other_condition) {

   } else {

   }

}

In the first example we're using some implicit JS behavior about {} uses. We can omit these curly braces if there is only one statement inside. Which is the case in this construct, because the inner if-then-else only counts as one statment. The truth is that those are 2 nested if-statements. And not an if-statement with 2 branches, as it may appear on first sight.

This way it resembles the elseif that is present in other languages.

It is a question of style and preference which way you use it.


When people ask questions like this.. I think it shows a fundamental misunderstanding. With if and else there really is no need of elseif.
@Mark, I agree... but it messes me up sometimes because I'm used to languages that have an elseif. I know it's identical, but I wonder what javascript's reason is for leaving it out. I am glad, however, that they didn't use elif, because that's just wrong :)
@JayK: Haha.. PHP has elseif, perl has elsif (I think), and Python has elif.. that kind of annoyed me at first, but... I guess it's kind of cute. It does serve a slight purpose in Python and PHP though, because it wouldn't work with their colon syntax otherwise.
@Mark It more shows a misunderstanding of bracketing. Brackets aren't necessary for if/else blocks, but people are encouraged to use them, so I can understand why this looks incorrect to a new user.
@Mark To claim that there is never a reason to use "else if" is incorrect. Else if statements are akin to using "switch", however it will allow for more elaborate comparisons. Switch, of course, allows for very simple comparisons only. So yes, there's definitely good reasons for using else if.
I
Inanc Gumus

Just add a space:

if (...) {

} else if (...) {

} else {

}

T
Tamlyn

You could use this syntax which is functionally equivalent:

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

This works because each condition is fully evaluated before comparison with the switch value, so the first one that evaluates to true will match and its branch will execute. Subsequent branches will not execute, provided you remember to use break.

Note that strict comparison is used, so a branch whose condition is merely "truthy" will not be executed. You can cast a truthy value to true with double negation: !!condition.


This is not functionally equivalent AFAIK. What you can put in the conditions is much more limited, and switch (true) doesn't even make sense.
I admit it looks weird at first but it is equivalent. The condition can be anything you like (including function calls or whatever) and if it evaluates to true then that case will be met - exactly like else if.
Oh, I see what you're doing now. That's pretty darn clever. (I added a paragraph explaining how it works, so that I could retract my downvote.)
This is a very simple, clean and elegant solution for condition lists with more than 1 "else if" condition
Not completely equivalent if the conditions don't return booleans, e.g. if([]) alert('a') produces the alert but switch(true){case []:alert('a')} doesn't. That's because [] is a truthy value but not equal to true, as @zwol explained in this edit.
s
skube

Actually, technically when indented properly, it would be:

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

There is no else if, strictly speaking.

(Update: Of course, as pointed out, the above is not considered good style.)


You can, and you should, write this if (condition1) { ... } else if (condition2) { ... } else { ... }.
In essence when using else if you are actually omitting the optional block {...}. I was referencing based on EMCAScript and MDN..
In terms of the formal grammar of the language, you are correct, but your answer might give people the incorrect impression that else { if ... } is good style.
What zwol said. There is what you (skube) meant.. And then there is what you said.
I
IdemeNaHavaj
if ( 100 < 500 ) {
   //any action
}
else if ( 100 > 500 ){
   //any another action
}

Easy, use space


A
A.A Noman

Conditional statements are used to perform different actions based on different conditions.

Use if to specify a block of code to be executed, if a specified condition is true

Use else to specify a block of code to be executed, if the same condition is false

Use else if to specify a new condition to test, if the first condition is false


z
zloctb
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') 

c
codemirror

You are missing a space between else and if

It should be else if instead of elseif

if(condition)
{

} 
else if(condition)
{

}
else
{

}