Skip to main content

조건문

  • 조건문은 조건이 참(true), 거짓(false)인지에 따라 코드 수행 여부를 따짐

조건문

if문 작성

if (조건식) {
//조건식이 참이면 내부 code 실행
//code
}

if, else if, else 문

  • if, else if, else 순서로 동작한다.
  • else는 조건을 작성할 필요가 없다.
var score = prompt("나의 점수는??");
// prompt는 브라우저에서 실행하면 입력창이 뜨며, 입력값을 score에 반환한다.

if (score >= 90) document.write("A", score);
// document.write는 입력 값을 화면에 출력한다.
else if (score >= 80) document.write("B", score);
else if (score >= 70) document.write("C", score);
else document.write("분발하세요!", score);

// 입력: 87
// 출력 B 87

삼항 조건 연산자

  • 조건식 ? 조건식이 참일 때 : 조건식이 거짓일 때의 형태를 가진다.
var a = 10;
var b = 8;

let check = a > b ? true : false;
console.log(check); //true

// 위의 삼항 조건 연산자를 풀어서 사용하면 밑의 if-else문과 같다.

let check;
if (a > b) {
check = true;
} else {
check = false;
}
console.log(check); //true
// 삼항 연사자를 여러번 사용
var score = 74;
if (score >= 90) {
console.log("A");
} else if (score >= 80) {
console.log("B");
} else {
console.log("C");
}
//C

// 위의 조건문은 밑의 삼항 조건 연산자와 같다.

var score = 89;
score >= 90
? console.log("A")
: score >= 80
? console.log("B")
: console.log("C");
//B
danger

if 조건문삼항 조건 연산자의 차이점은 뭐가 있을까?
템플릿 리터럴 내부에서 사용할 때 차이점이 존재한다.

var a = 10
console.log(`${a > 0 ? "정답" : "오류"} 입니다.`) // 정답 입니다.
console.log(`${if(a > 0){console.log("정답")}else{"오류"}} 입니다.`)// Syntax Error(문법 오류)

결과와 같이 삼항 조건 연산자는 출력되지만 조건문은 출력이 되지않는다.
이유는 삼항 조건 연산자표현식이고, if 조건문제어 구조이기 때문이다.

switch문

  • switch('변수' 혹은 '조건문')을 작성, 내부에 각각에 '변수'혹은 '조건'에 맞는 case 구문을 작성
switch (new Date().getDay()) {
// 일요일은 0 ~ 토요일은 6
case 0:
console.log("일요일 입니다.");
break;
case 1:
console.log("월요일 입니다.");
break;
default:
console.log("요일 몰라~");
break;
}
// 날짜마다 출력 결과가 바뀐다.
// 0이면 일요일 입니다.
// 1이면 월요일 입니다.
// 나머지는 요일 몰라~ 출력
조건문 형태의 switch구문
caution
var score = parseInt(prompt("내 성적은 ...?"));

switch (score) {
case score >= 90:
console.log("A 입니다.");
break;
case score >= 80:
console.log("B 입니다.");
break;
default:
console.log("재수강 확정");
break;
}
// 입력 91
// 출력 재수강 확정

분명 91점을 입력하여 A 입니다. 출력을 기대하였을 것이다.
하지만 재수강 확정이 출력 되었다. 왜일까?

switch는 특정 값과 일치하는데 사용되는 문법이다.
하지만 위의 코드 사용 목적은 조건에 따라 분기로 사용하였기에 적합하지 않다.

해결방법

  1. if-else문으로 변경하여 코드 작성(권장)
  2. switch(score)에서 score 부분을 true나 조건식을 작성
break가 없는 switch
caution
var score = 90;
switch (score) {
case 90:
console.log("A 입니다.");
case 80:
console.log("B 입니다.");
default:
console.log("재수강 확정");
}

출력 결과는 A 입니다., B 입니다., 재수강 확정 이다.
분명 score의 값은 90이고 case 90도 있음에도 불구하고 전부 출력이 되었다.

score값이 case 90부터 동작을 실행한다.
하지만 case 90 부분만 실행되는 것이 아닌 case 90 밑에 작성된 코드 전부 실행이 된다.
의도된 코드이면 문제가 없지만 의도되지 않은 경우 엄청난 오류를 야기한다.
이런 오류를 없애기 위해 case 구문이 끝나는 지점에 break를 꼭 사용 해야된다.