if 문과 switch 문 외에도 분기 처리에 사용되는 식이 있다.
조건식 ? '참일 때 실행되는 식' : '거짓일 때 실행되는 식';
조건부 연산자는 문이 아니라 식이기 때문에 결과값이 나온다.
5 > 0 ? '참 입니다.' : '거짓 입니다.';
>>> '참 입니다.'
연산자의 우선 순위가 조건부 연산자의 우선순위보다 높기 때문에 5 > 0이 먼저 실행된다.
let value = 5 < 0 ? '참 입니다.' : '거짓 입니다.';
value;
>>> '거짓 입니다.'
switch 문을 if 문으로 바꿀 수 있으므로, 조건부 연산자도 if 문으로 바꿀 수 있다.
# 조건부 연산자
let condition = true;
let value = condition ? '참' : '거짓';
console.log(value)
# if 문으로 바꾸기
if (condition) {
value = '참';
} else {
value = '거짓';
}
console.log(value);
>>> '참'
이중 if 문처럼 조건부 연산자 안에 조건부 연산자를 넣을 수 있다.
let condition1 = true;
let condition2 = false;
let value = condition1 ? condition2 ? '둘 다 참' \
: 'condition1만 참' : 'condition1 거짓';
console.log(value)
<<< 'condition1만 참'
위처럼 바꿀 수 있겠지만, 다른 개발자들과 협업을 위하여 소괄호를 활용하여 구분을 도와주는 것이 좋다.
# 바꾸기 전
let value = condition1 ? condition2 ? '둘 다 참' \
: 'condition1만 참' : 'condition1 거짓';
# 바꾼 후
let value = condition ? ( condition2 ? '둘 다 참' : 'condition1만 참') : 'condition1 거짓';
소괄호도 가능하지만, 들여쓰기도 가능하다.
# 들여쓰기 바꾸기 전
let value = condition1 ? condition2 ? '둘 다 참' \
: 'condition1만 참' : 'condition1 거짓';
# 들여쓰기 바꾼 후
let value = condition1;
? condition2
? '둘 다 참';
: 'condition1만 참';
: 'condition1이 거짓';
첫 번째 조건(condition1)이 참인 경우 중첩된 조건부 연산에 들어갔지만, 거짓이 들어갈수도 있다.
if 문과 switch 문을 조건부 연산자로 바꿔라
# if 문
let cond = true;
let value = '';
if (cond) {
value = '참';
} else {
value = '거짓';
}
# 조건부 연산자
let cond = true;
let value = cond ? '참' : '거짓';
# switch 문
let cond = true;
let value = '';
switch (cond) {
case true :
value = '참 입니다.';
break;
case false :
value = '거짓 입니다.';
break;
}
# 조건부 연산자
let cond = true;
let value = cond ? '참 입니다.' : '거짓 입니다.';