简体   繁体   中英

Different outputs using switch and if else statements in JavaScript

I am a beginner in learning programming, more specifically JavaScript. I have come across a small problem while studying coding. When I use switch statements to solve a piece of problem, it produces right output.

 var dateNow = 3; var dateSuffix; switch (dateNow) { case 1: case 21: case 31: dateSuffix = "st"; break; case 2: case 22: dateSuffix = "nd"; break; case 3: case 23: dateSuffix = "rd"; break; default: dateSuffix = "th"; break; } console.log("Today is the " + dateNow + dateSuffix + " day."); 

But when I do the same with if else statements, the output is wrong.

 var dateNow = 3; var dateSuffix; if (dateNow == 1 || 21 || 31) { dateSuffix = "st"; } else if (dateNow == 2 || 22) { dateSuffix = "nd"; } else if (dateNow == 3 || 23) { dateSuffix = "rd"; } else { dateSuffix = "th"; } console.log("Today is " + dateNow + dateSuffix + " day of the month..."); 

Could anyone please point out the problem with my if statements?

You can't use dateNow == 1 || 21 || 31 dateNow == 1 || 21 || 31 dateNow == 1 || 21 || 31 .

You need to use either [1,21,31].includes(dateNow)

Or dateNow == 1 || dateNow == 21 || dateNow == 31 dateNow == 1 || dateNow == 21 || dateNow == 31

 var dateNow = 3; var dateSuffix; if ([1,21,31].includes(dateNow)) { dateSuffix = "st"; } else if ([2,22].includes(dateNow)) { dateSuffix = "nd"; } else if ([3,23].includes(dateNow)) { dateSuffix = "rd"; } else { dateSuffix = "th"; } console.log("Today is " + dateNow + dateSuffix + " day of the month..."); 

 var dateNow = 3; var dateSuffix; if (dateNow == 1 || dateNow ==21 || dateNow ==31) { dateSuffix = "st"; } else if (dateNow == 2 || dateNow ==22) { dateSuffix = "nd"; } else if (dateNow == 3 || dateNow ==23) { dateSuffix = "rd"; } else { dateSuffix = "th"; } console.log("Today is " + dateNow + dateSuffix + " day of the month..."); 
I replaced your code

 if (dateNow == 1 || 21 || 31) { 

with is code if (dateNow == 1 || dateNow ==21 || dateNow ==31) { your code only trigger first if condition This code will help you

Update: As @Xufox pointed out, this answer is not true. This is false.

In addition to @Zenoo's answer, I have tested with this code:

dateNow = 2

console.log(dateNow == 1)
console.log(dateNow == 1 || 2)

console.log(true == 0)
console.log(true == 1)
console.log(true == 2)

Results:

false
2
false
true
false

My explanation is that dateNow == 1 || 2 dateNow == 1 || 2 is treated as (dateNow == 1) || 2 (dateNow == 1) || 2 which is false as we can see.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM