728x90
1. 블록문
- 0개 이상의 문을 중괄호로 묶은 것
- 자체 종결성을 갖기 때문에 블록문의 끝에 ; 붙이지 않음
// 블록문
{
var foo = 100;
}
// 제어문
var x = 1;
if( x < 10 ) {
x++;
}
// 함수 선언문
function sum(a, b) {
return a + b;
}
2. 조건문
- 주어진 조건식의 평과 결과에 따라 코드 블록의 실행을 결정
- if ... else 문
- 조건식의 평가 결과 true 면 if 문의 코드 블록 실행, false 면 else 문의 코드 블록 실행
- if ... else if ... else
if(조건식1) {
// 조건식1이 참이면 이 코드 블록 실행
}else if(조건식2) {
// 조건식2이 참이면 이 코드 블록 실행
}else{
// 조건식1과 조건식2가 모두 거짓이면 이 코드 블록 실행
}
- else if는 else와 달리 여러번 사용 가능
- 조건에 따라 단순히 값을 결정하여 할당하는 경우 삼항 조건 연산자 사용
var num = 2;
// 0은 false로 취급
var kind = num ? (num > 0 ? '양수' : '음수') : '영';
console.log(kind); // 양수
- switch 문
- 주어진 표현식 평가하여 그 값과 일치하는 표현식을 갖는 case 문으로 실행 흐름 옮김
- 일치하는 문이 없다면 defalut문으로 이동
- break로 코드 블록에서 탈출
- default문에는 break 문을 생략
- 폴스루(fall through) : 표현식의 평가 결과와 일치하는 case 문으로 이동해 실행했지만 그 후 switch 문을 탈출하지 않고 끝날 때 까지 이후 모든 case 문과 defalut 문을 실행하는 현상
// 폴스루 현상 활용
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:
// 윤년 계산 알고리즘
// 1. 연도가 4로 나누어떨어지는 해 (2000, 2004, 2008 ,,,)는 윤년
// 2. 연도가 4로 나누어떨어지더라도 연도가 100으로 나누어떨어지는 해 (2000, 2100, 2200)는 평년
// 3. 연도가 400으로 나누어떨어지는 해(2000, 2400, 2800 ...)는 윤년
days = ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) ? 29 : 28;
break;
defaut:
console.log('Invalid month');
}
console.log(days); 29
3. 반복문
- 조건식의 평가 결과가 참인 경우 코드 블록 실행
- for문, while 문, do ... while 문 제공
// for 문
for ( 변수 선언문 또는 할당문; 조건식; 증감식 ) {
조건식이 참인 경우 반복 실행될 문;
}
// 중첩 사용 가능
// 주사위 던졌을 때 두 수의 합이 6이 되는 경우의 수 출력
for (var i = 1; i <= 6; i++){
for (var j = 1; j <= 6; j++){
if( i + j === 6 ) console.log(`[${i} , ${j}]`);
}
}
// while 문 -> 반복 횟수가 불명확할 때 사용
var count = 0;
// count가 3보다 작을 때까지 코드 블록을 계속 반복 실행
while (count < 3 ) {
console.log(count); // 0 1 2
count ++;
}
// do ... while 문 -> 코드 블록을 먼저 실행하고 조건식 평가
4. break 문
- 레이블 문, 반복문, switch 문의 코드 블록 탈출
- 이외의 문에서 사용 시 SyntaxError(문법 에러) 발생
- 레이블 문 : 식별자가 붙은 문, 프로그램의 실행 순서 제어 , 코드 흐름을 복잡하게 하니 사용하지 말 것
foo : {
console.log(1);
breack foo; // foo 레이블 블록문 탈출
console.log(2);
}
console.log('Done!');
5. contine 문
- 반복문의 코드 블록을 현 지점에서 중단, 반복문의 증감식으로 실행 흐름 이동
var string = 'Hello World';
var search = 'l';
var count = 0;
// 문자열은 유사 배열, for문으로 순회 가능
for (var i = 0; i < string.length; i++) {
// 'l'이 아니면 현 지점에서 실행 중단, 반복문의 증감식으로 이동
if (string[i] !== search) continue;
count++; // continue 문이 실행되면 이 문을 실행하지 않음
}
console.log(count); // 3
// String.prototype.match 메서드도 똑같이 동작
const regexp = new RegExp(search, 'g');
console.log(string.match(regexp).length); // 3
- if 문 내에서 실행하야 할 코드가 길 때 continue를 사용하면 가독성 좋음
// continue 문 사용 하지 않을 시 if 문 내에 코드 작성해야 함
for (var i = 0; i < string.length; i++) {
// 'l'이면 카운트 증가
if(string[i] === search) {
count++;
// code
// code
// code
} // 들여쓰기가 한 단계 더 깊어짐. 가독성 좋지 않음
}
// continue 문 사용 시 if 문 밖에 코드 작성 가능
for (var i = 0; i < string.length; i++) {
// 'l'이 아니면 카운트 증가시키지 않음
if(string[i] !== search) continue;
count++;
// code
// code
// code
}
참고 : 모던 자바스크립트 Deep Dive
728x90
'TIL > JavaScript' 카테고리의 다른 글
[딥다이브] 10장 객체 리터럴 (0) | 2022.04.26 |
---|---|
[딥다이브] 9장 타입 변환과 단축 평가 (0) | 2022.04.24 |
[딥다이브] 7장 연산자 (0) | 2022.04.21 |
프론트엔드 웹개발 환경 셋팅 (0) | 2022.04.21 |
[딥다이브] 6장 데이터 타입 (0) | 2022.04.20 |