javascript switch 문 안의 if 문

EJ__OH·2021년 6월 30일
0

javascript를 통해 조건문을 공부하던 중 poiemaweb에 switch 문을 활용한 윤년 계산 알고리즘 예시가 있었다.

var year = 2000;
var month = 2;
var days = 0;

switch(month){
  case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    days = 31;
    break;
  
  case 4: case 6: case 9: case 11:
    days = 30;
    break;
  
  case 2:
	days = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0))? 29 : 28;
    break;

  default:
    console.log("Invalid month");
}

console.log(days);

예시는 위와 같은데 2월을 처리할 때 삼항 조건문을 사용했다.
공부할 때 삼항 조건문은 if...else 문으로 바꿔 쓸 수 있다고 해서 바꿔 써보고 싶었다.

그래서 처음 작성한 코드는 다음과 같다.

if(year % 4 === 0){
        if(year % 100 === 0){
          if(year % 400 === 0){
            days = 29;
          }
          days = 28;
        }
        days = 29;
      }
    break;

좋은 코드는 아니지만 의도한 바는 if문 안의 if문 안의 if문이 실행되면서 처음 나오는 days= 29; 가 실행될 줄 알았는데 계속해서 제일 마지막 days = 29; 가 실행되었다.

좋은 코드도 아니고 다시 찾은 코드는 이렇다.

if((year % 4 ===0 && year % 100 !== 0) || year % 400 === 0){
      days = 29;
    } else {
      days = 28;
    }

괜찮은 코드를 찾았지만 처음 내가 적은 코드가 왜 내 생각대로 작동이 안 하는가 하는 집착이 도져버렸다...

결론은...
큰 틀은 switch 문 이라서 case에 따라 break 를 걸어줘야 했는데 break 없이 작성하여 모든 구문이 전부 실행된 것.
첫 코드를 정상적으로 작성한다면 다음과 같다.

    if(year % 4 === 0){
        if(year % 100 === 0){
          if(year % 400 === 0){
            days = 29;
            break;
          }
          days = 28;
          break;
        }
        days = 29;
        break;
      }

뿌듯뿌듯 😎

profile
Junior FE Developer

0개의 댓글