if문
: 조건에 따라 다른 행동을 취해야 할 때가 있다.
이럴 땐, if문과 '물음표' 연산자라고도 불리는 조건부 연산자 ? 를 사용하면 된다.
- ' if ' 문
if( ... ) 문은 괄호 안에 들어가는 조건을 평가하는데 그 결과가 true이면 코드 블록이 실행된다.
let study = prompt('지금 공부하는 과목이 무엇입니까?', '');
if (study == javascript) {
alert( "정답입니다.");
alert( "good!");
}
조건이 true 일 때 복수의 문을 실행하고 싶다면 중괄호로 코드 블록을 감싸야 한다.
if 문을 쓸 때는 조건이 참일 경우 실행되는 구문이 한 줄이더라도 코드의 가독성을 위해 중괄호 { }를 사용해 코드를 블록으로 감싸는걸 추천한다.
- boolean 형으로의 변환
if ( ... ) 문은 괄호 안의 표현식을 평가하고 그 결과를 boolean값으로 변환한다.
- 숫자 0, 빈 문자열 " " , null , undefined , NaN 은 boolean형으로 변환 시 모두 false가 된다. 이런 값들은 'falsy(거짓 같은)' 값이라고 부른다.
- 이 외의 값은 불린형으로 변환시 true가 되므로 truthy 값이라고 부른다.
if (0) { // false
.....
}
위의 규칙을 따르면 0은 falsy이다.
if (1) { //true
.....
}
이 코드 블록은 항상 실행된다.
또한, 확정된 불린값을 if문에 전달할 수도 있다.
let current = (year == 2023); // 비교를 통해 true/false 여부를 결정.
if (current) {
...
}
- else 절
if 문에는 else 절을 붙일 수 있다.
else 뒤에 이어지는 코드 블록은 조건이 거짓일 때 실행된다.
let age = prompt('올 해 몇살인가요?', '');
if (age == 27) {
alert( '정답입니다!' );
} else {
alert( '오답입니다!' ); // 이외의 값을 입력하는 경우
}
- ' else if '
조건 여러 개를 처리해야 할 때 사용할 수 있다.
let year = prompt ('올 해는 몇년도 일까요?', '');
if (year < 2023) {
alert( '숫자를 좀 올려보세요.');
} else if (year > 2023) {
alert( '숫자를 좀 내려보세요.');
} else {
alert('정답이에요!')
}
자바스크립트는 조건 year < 2023 을 먼저 확인하고,
이 조건이 거짓이라면 다음 조건 year > 2023 을 확인한다.
이 조건 또한 거짓이라면 else 절 내의 alert를 실행한다.
else if 는 여러 개를 더 붙이는 것도 가능하다.
마지막에 붙는 else는 필수가 아닌 선택사항이다.
- 조건부 연산자 ' ? '
조건에 따라 다른 값을 변수에 할당해줘야 할 때가 있다.
let accessAge;
let age = prompt('나이를 입력해 주세요.', '');
if (age > 25) {
accessAge = true;
} else {
accessAge = false;
}
alert(accessAge);
'물음표(question mark) 연산자' 라고도 불리는 '조건부(conditional) 연산자' 를 사용하면 위 예시를 더 짧고 간결하게 변형 할 수 있다.
조건부 연산자는 물음표 ? 로 표시한다.
피연산자가 세 개이기 때문에 조건부 연산자를 '삼항(ternary) 연산자' 라고 부르기도 한다.
참고로, 자바스크립트에서 피연산자를 3개나 받는 연산자는 조건부 연산자가 유일하다.
문법 :
let result = condition ? value1 : value2;
평가 대상인 condition이 truthy라면 value1 이, 그렇지 않으면 value2 가 반환된다.
예시 :
let accessAge = (age > 25) ? true : false;
age > 25 옆의 괄호는 생략 가능하다.
물음표 연산자는 우선순위가 낮으므로 비교 연산자 > 가 실행되고 난 뒤에 실행된다.
let accessAge = age > 25 ? true : false;
괄호가 있으나 없으나 차이는 없지만, 코드의 가독성 향상을 위해 괄호를 사용할 것을 권유한다.
또한
비교 연산자 자체가 true 나 false를 반환하기 때문에 위 예시에서 물음표 연산자를 사용하지 않아도 된다.
let accessAge = age > 25;
- 다중 ' ? '
물음표 연산자 ? 를 여러개 연결하면 복수의 조건을 처리할 수 있다.
let age = prompt('나이를 입력하세요.', 25);
let message = (age < 20) ? '미성년자는 음주 불가에요.'; :
(20 <= age < 75) ? '어서오세요.'; :
(age < 75) ? '음주를 삼가해주세요.'; :
'나이를 올바르게 입력해주세요.';
alert(message);
이 코드는 처음보기엔 파악하기 힘들 수도 있지만,
단순히 여러 조건을 나열한 코드에 불과하다.
- 첫 번째 물음표에선 조건문 age < 20 을 검사합니다.
-> 그 결과가 참이면 '미성년자는 음주 불가에요.' 를 return 한다.
- 그렇지 않다면(false라면) 첫번째 콜론 " : " 에 이어지는 조건문 20 <= age < 75 를 검사한다.
-> 그 결과가 참이면 '어서오세요.' 를 반환한다.
- 그렇지 않다면 다음 콜론 " : " 에 이어지는 조건문 age < 75를 검사한다.
-> 그 결과가 참이면 '음주를 삼가해주세요.' 를 return 한다.
- 그렇지 않다면 마지막 콜론 " : " 이후의 표현식인 '나이를 올바르게 입력해주세요.' 를 return한다.
위에 조건문을 if ... else 를 사용해서 변형해보자면
let age = prompt('나이를 입력하세요.', 25);
if (age < 20) {
message = '미성년자는 음주 불가에요.';
} else if (20 <= age < 75) {
message = '어서오세요.';
} else if (age < 75) {
message = '음주를 삼가해주세요.';
} else {
message = '나이를 올바르게 입력해주세요.';
}
alert(message);
- 부적절한 ' ? '
우리에겐 가독성 또한 중요하다.
코드를 읽을 때 우리의 눈은 수직으로 움직인다.
수평으로 늘어진 코드보단
여러줄로 나뉘어 작성된 코드 블록이 더 읽기 쉽다.
물음표 연산자 ? 는 조건에 따라 반환 값을 달리하려는 목적으로 만들어졌다.
여러 분기를 만들어 처리할 때는 if 를 사용하자.
'Javascript > 기초' 카테고리의 다른 글
[fetch] fetch 기본 예시 쉽게 풀어보기 (0) | 2023.12.13 |
---|---|
[배열] toString 메서드 (0) | 2023.12.04 |
[자료와 변수] - 자료형 (0) | 2023.11.28 |
배열의 마지막으로 데이터 추가하기 (0) | 2023.11.26 |
배열에서 데이터 꺼내기 (1) | 2023.11.26 |