17. 조건문
제어문(control flow statements) : 프로그램의 순차적인 흐름을 제어해야 할 때 사용하는 실행문.
조건문(conditional statements)
: 표현식의 결과에 따라 별도의 명령을 수행하도록 제어하는 실행문.
1. if 문
: 실행문이 한 줄이면 중괄호({}) 생략 가능.
2. if / else 문
: 실행문이 한 줄이면 중괄호 생략 가능.
3. if / else if / else 문
4. switch 문
: default 절은 어떠한 case 절에도 해당하지 않을 때 실행. 반드시 존재해야 하는 것은 아님. 반드시 마지막일 필요도 없음.
: case 절과 default 절은 반드시 break 키워드를 포함하고 있어야 함.
: break 키워드는 조건 값에 해당하는 case 절이나 default 절이 실행된 뒤에 switch 문을 빠져나가게 해줌.
switch (조건 값) {
case 값1:
조건 값이 값1일 때 실행하고자 하는 실행문;
break;
case 값2:
조건 값이 값2일 때 실행하고자 하는 실행문;
break;
...
default:
조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 실행문;
break;
}
18. 반복문(iteration statements)
반복문 : 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 실행문.
1. while 문
: 특정 조건을 만족할 때까지(=표현식의 결과가 true인 동안) 주어진 실행문 반복.
: 표현식이 true면 내부의 실행문 실행, 내부의 실행문 다 실행하고 나면, 다시 표현식으로 돌아와 표현식이 true인지 판단.
: loop ; 표현식의 검사를 통해 반복해서 실행되는 반복문.
: 실행문이 한 줄이면 중괄호({}) 생략 가능.
2. do / while 문
: while 문과는 다르게 do / while은 먼저 루프를 한 번 실행한 후에 표현식 검사(표현식의 결과와 상관없이 무조건 한 번은 루프 실행)
3. for 문
: 자체적으로 초기식, 표현식, 증감식을 모두 포함하고 있는 반복문.
: 초기식, 표현식, 증감식은 각각 생략될 수 있음.
: 쉼표 연산자(,)를 사용하면 여러 개의 초기식이나 증감식을 동시에 사용 가능.
: 실행문이 한 줄이면 중괄호({}) 생략 가능.
4. for / in 문
: for 문과는 완전 다름.
: 해당 객체의 모든 열거할 수 있는 프로퍼티(enumerable properties)를 순회할 수 있도록 해줌.
열거할 수 있는 프로퍼티 : enumerable 플래그가 true로 설정된 프로퍼티
: 루프마다 객체의 열거할 수 있는 프로퍼티의 이름을 지정된 변수에 대입.
: 대입받은 변수를 이용하면 루프 안에서 객체의 열거할 수 있는 프로퍼티에 순차적으로 접근 가능.
: 모든 프로퍼티를 반환하는 것이 아니라 오직 열거할 수 있는 프로퍼티만 반환.
for (변수 in 객체) {
객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}
: 배열의 요소에 접근.
var arr = [3, 4, 5];
for (var i = 0; i < arr.length; i++) { // 배열 arr의 모든 요소의 인덱스(index)를 출력함.
document.write(i + " ");
}
for (var i in arr) { // 위와 같은 동작을 하는 for / in 문
document.write(i + " ");
}
: 객체의 프로퍼티에 접근.
var obj = { name : "이순신", age : 20 };
for (var i in obj) {
document.write(i + "<br>");
}
5. for / of 문
: 반복할 수 있는 객체(iterable objects)를 순회할 수 있도록 해주는 반복문.
반복할 수 있는 객체 : Array, Map, Set, arguments 객체 등.
: 익스플로러에서 지원하지 않음.
: 루프마다 객체의 열거할 수 있는 프로퍼티의 값을 지정된 변수에 대입함.
for (변수 of 객체) {
객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}
: 배열의 요소에 접근.
var arr = [3, 4, 5];
for (var i = 0; i < arr.length; i++) { // 배열 arr의 모든 요소의 인덱스(index)를 출력함.
document.write(arr[i] + " ");
}
for (var value of arr) { // 위와 같은 동작을 하는 for / of 문
document.write(value + " ");
}
: Set 객체의 프로퍼티에 접근.
var arr = new Set([1, 1, 2, 2, 3, 3]);
for (var value of arr) {
document.write(value + " ");
}
19. 기타 제어문
루프의 제어
: 보통 표현식의 검사를 통해 루프로 진입하면, 다음 표현식을 검사하기 전까지 루프 안에 있는 모든 실행문을 실행하는데, continue 문과 break 문은 일반적인 루프의 흐름을 사용자가 직접 제어할 수 있게 해줌.
: label 문을 사용하면 continue 문과 break 문의 동작이 프로그램의 흐름을 특정 영역으로 이동시킬 수 있음.
label 문
: 프로그램 내의 특정 영역을 식별할 수 있도록 해주는 식별자.
label:
식별하고자 하는 특정 영역
: 다음 예제에서 라벨인 arrIndex는 그 이후에 나오는 for 문 전체를 가리키는 식별자로 사용.
arrIndex:
for (var i in arr) {
document.write(i);
}
continue 문
: 루프 내에서 사용하여 해당 루프의 나머지 부분은 건너뛰고, 바로 다음 표현식의 판단으로 넘어가게 함.
: 반복문 내에서 특정 조건에 대한 처리를 제외하고자 할 때 사용.
1. continue;
2. continue 라벨이름;
: 다음 예제는 1부터 100까지의 정수 중에서 3의 배수를 제외하고 출력하는 예제.
var exceptNum = 3;
for (var i = 0; i <= 100; i++) {
if (i % exceptNum == 0) // exceptNum의 배수는 출력하지 않음.
continue;
document.write(i + " ");
}
: 다음 예제는 라벨을 이용하여 구구단의 값이 홀수인 경우에만 출력하는 예제.
gugudan:
for (var i = 2; i <= 9; i++) {
dan:
for (var j = 1; j <= 9; j++) {
if ((i*j) % 2 == 0)
continue dan;
document.write(i + " * " + j + " = " + (i*j) + "<br>");
}
}
break 문
: 반복문 바로 다음에 위치한 실행문으로 흐름을 이동시키고, 루프 내에서 표현식의 판단 결과에 상관없이 원하는 값을 찾으면 반복문을 완전히 빠져나감.
: 다음 예제는 라벨을 이용하여 구구단을 3단까지만 출력하는 예제
gugudan:
for (var i = 2; i <= 9; i++) {
dan:
for (var j = 1; j <= 9; j++) {
if (i > 3)
break gugudan;
document.write(i + " * " + j + " = " + (i*j) + "<br>");
}
}
'공부 > JavaScript' 카테고리의 다른 글
TCP school | 6. 함수 (0) | 2021.03.19 |
---|---|
Property(프로퍼티) (0) | 2021.03.18 |
TCP school | 3. 연산자 (0) | 2021.03.18 |
TCP school | 2. 타입 (0) | 2021.03.18 |
TCP school | 1. 자바스크립트 시작 (0) | 2021.03.18 |