🔆 조건문
- 주어진 조건식의 평가 결과에 따라 코드블록의 실행을 결정한다.
- 조건식이란?? 불리언 값으로 평가될 수 있는 표현식이다.
- if- else 구문과 switch 문으로 두가지 조건문을 제공한다.
if 문의 조건식은 불리언 값으로 평가되어야 하는데 만약 불리언 값이 아닌 값으로 평가된다면, JS 엔진에 의해 암묵적 타입 변환이 실행되어 강제적으로 불리언 값으로 변환되어 평가된다.
⚠️ 삼항조건연산자
if - else 문은 삼항 연산자로 바꾸어 쓸 수 있다. 예시를 들어보겠담
var x = 2; var result; if (x % 2 ) { // 이때 2%2 는 0이기 때문에 false 로 강제변환됨 result = "홀수"; } else { result = "짝수"; } console.log(result) // 짝수
위의 코드를 삼항 연산자로 바꾸어보자.
var x = 2; var result = x %2 ? "홀수" : "짝수" ; console.log(result) ; // 짝수
만약! 위의처럼 홀 짝수 말고 세가지의 경우라면 어떻게 바꿀까??
var num =2; var kind = num ? (num > 0 ? "양수" : "음수") : "영"; console.log(kind); //양수
=> 삼항조건 연산자는 값으로 평가되는 표현식을 만든다.
따라서... 값으로 사용할 수 있기 때문에 변수에 할당할 수 있다.
하지만!! If - else 문은 표현식이 아니라서 값으로 사용할 수 없기 때문에 변수에 할당할 수 없다. ( 그래서 하나하나 비교하는 것임..)
🔊 switch 문
- 주어진 표현식을 평가하여 그 값과 일치하는 표현식을 case 문으로 실행흐름을 옮긴다.
- case 문은 상황을 의미하는 표현식을 지정하고 콜론으로 마친다.
- 그리고 그 뒤에 실행할 문들을 위치시킨다.
=> switch 문은 불리언값으로 평가되는 if-else 와 달리 불리언 값보다는 문자열이나 숫자값인 경우가 많다.
=> 만약에 switch 와 일치하는 case 문이 없다면... 실행순서는 default 문으로 이동함
=> 물론~ default 는 선택사항임!
🔇 break 와 continue
- 풀스루(fall through) : 문을 실행한 후 switch 문을 탈출하지 않고 switch 문이 끝날 때까지 이후의 모든 case 문과 default 문을 실행함
- break: 반복문, switch 문 등의 코드블록에서 탈출하는 역할을 함
- => 이런 아이들 아니고 break 를 사용하면 당연히 문법 에러가 난다.
- break 가 없다면 case 문의 표현식과 일치하지 않더라도 실행흐름이 case 로 연이어 이동함
- continue : 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행흐름을 이동시킨다.
- continue 는 break 처럼 반복문을 탈출하지는 않는다.
풀스루 부터 한번 이해해보자.
var month = 11;
var monthName;
swith (month) {
case1: monthName = "Jan";
case2: monthName = "Feb";
case3: monthName = "March";
case4: monthName = "April";
case5: monthName = "May";
case6: monthName = "June";
case7: monthName = "July";
case8: monthName = "Aug";
case9: monthName = "Sept";
case10: monthName = "Oct";
case11: monthName = "Nov";
default: monthName = "invalid month";
}
console.log(monthName)
이것은 당연히 case 11: "Nov" 로 결과가 나와야할 것만 같다.
하지만!
break 가 없으면
올바른 상황(case) 에 도달했음에도 switch 문을 빠져나오지 못하고
다음 case 실행, 다음 case 실행...계속실행하여... default 까지 가게 되는 것이다.
따라서 위의코드를 실행해보면
console.log(monthName);
//Incalid month
이러한 결과가 나오게 된다.
따라서 우리가 원하는 결과로 완벽하게 나오게 하려면
var month = 11;
var monthName;
swith (month) {
case1: monthName = "Jan";
break;
case2: monthName = "Feb";
break;
case3: monthName = "March";
break;
case4: monthName = "April";
break;
case5: monthName = "May";
break;
case6: monthName = "June";
break;
case7: monthName = "July";
break;
case8: monthName = "Aug";
break;
case9: monthName = "Sept";
break;
case10: monthName = "Oct";
break;
case11: monthName = "Nov";
break;
default: monthName = "invalid month";
}
console.log(monthName)
이렇게 해주어야 한다.
이때 default 문에는 Break 문을 생략할 수 있다.
물론 의도적으로 Break 문을 생략하여 풀스루를 유도할 수도 있다.
의도적으로 사용하여 여러개의 case 문을 하나의 조건으로 사용하기 위함이다.
continue 문을 살펴보자
var string = "hihilong"; var search = "i"; var count = 0; for (var i = 0; i <string.length; i++) { if (string[i] ! == search) continue; count ++; // continue 가 실행되면 이건 실행되지 않는다. } console.log(count); //2
이런 식으로 사용할 수 있다.
흠.. 헷갈리니까 continue 를 사용하지 않은 if 문 내로 이해해보자.
var string = "hihilong"; var search = "i"; var count = 0; for (var i = 0; i < string.length; i++) { if (string[i] === search) { count++; } else { // continue 역할을 대신함, 아무것도 하지 않음 } } console.log(count); // 2
else 블록은 아무 작업도 수행하지 않으며, if 블록에서만 count 가 증가하도록 설정하였다.
요약본을 정리해두었다!
'Deep Dive 정리' 카테고리의 다른 글
[JS Deep Dive] 10장 -객체리터럴 (1) | 2024.08.27 |
---|---|
[JS Deep Dive] 2장 - 자바스크립트란? (0) | 2024.08.22 |
[JS Deep Dive] 6장 - 데이터타입 (0) | 2024.08.22 |
[JS Deep Dive] 4장 변수(2) - 변수 호이스팅이란? (0) | 2024.08.21 |
[JS Deep Dive] 4장 변수(1) (0) | 2024.08.21 |