반복문(iteration statements)이란?
- 반복문은 조건식의 평가 결과가 참인 경우 코드 블럭을 실행한다. 그 후 조건식을 다시 평가하여 여전히 참인 경우 코드 블럭을 다시 실행한다. 이를 조건식이 거짓이 될 때까지 반복한다.
기본 문법
for (변수 선언문 또는 할당문; 조건식; 증감식) { 조건식이 참인 경우 반복 실행할 문; }
let myNum = [79, 98, 86, 61];
for (let n = 0; n < myNum.length; n++) {
console.log(myNum[n]);
}
let myNum = [10, 20, 40, 10];
let sum = 0;
for (let n = 0; n < myNum.length; n++) {
sum = sum + myNum[n];
} // 80
- 아래 예제는 i 변수가 0으로 초기화된 상태에서 시작하여 i가
num
보다 작을 때까지 코드 블럭을 5번 반복 실행한다. 예제의 for 문의 동작 순서는 다음과 같다.// 1부터 num까지 숫자의 합을 구하는 for문 function sumTo(num) { let sum = 0; for (let i = 1; i <= num; i++) { sum = sum + i; } return sum; } console.log(sumTo(5)); // 15
- for 문을 실행하면 제일 먼저 변수 선언문
let i = 0
이 실행된다. 변수 선언문은 단 한번만 실행된다.
- 변수 선언문의 실행이 종료되면 조건식이 실행된다. 현재 i 변수의 값은 0이므로 조건식의 평가 결과는
true
이다.
- 조건식의 결과가
true
이므로 코드 블럭이 실행된다.증감문으로 실행 흐름이 이동하는 것이 아니라 코드 블럭으로 실행 흐름이 이동하는 것에 주의해야 한다.
- 코드 블럭의 실행이 종료되면 증감식
i++
가 실행되어 i 변수의 값은 1이 된다.
- 증감식 실행이 종료되면 다시 조건식이 실행된다. 변수 선언문이 실행되는 것이 아니라 조건식이 실행되는 것에 주의해야 한다. 현재 i 변수의 값은 1이므로 조건식의 평가 결과는
true
이다.
- 조건식의 평가 결과가 true이므로 코드 블럭이 다시 실행된다.
- 코드 블럭의 실행이 종료되면 증감식
i++
가 실행되어 i 변수의 값은 가 된다.
- 증감식 실행이 종료되면 다시 조건식이 실행된다. 이러한 과정이 i가 num보다 작을때까지 계속 반복되어 i가 5가 될때 조건식의 평가 결과는
false
이므로 for 문의 실행이 종료된다.
for (let i = 1; i <= 6; i++) {
for (let j = 1; j <= 6; j++) {
if (i + j === 6) {
console.log(`[${i}, ${j}]`)
}
}
}
// [1, 5]
// [2, 4]
// [3, 3]
// [4, 2]
// [5, 1]
기본 while 문 문법
while (조건식) { 조건식의 결과가 참인 경우 반복 실행할 문; }
// for 문
let sum = 1;
for (let n = 2; n <= 4; n++) {
sum = sum + n;
}
console.log(sum); // 10
// while 문
let sum = 1;
let n = 2;
while (n <= 4) {
sum = sum + n;
n++;
}
console.log(sum); // 10
let count = 0;
do {
console.log(count); // 0 1 2
count++;
} while (count < 3);
기본 for in 문 문법
for ('변수선언 키워드' '루프변수명' in 객체) { // 객체의 모든 셀 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문; }
let obj = {
a: '가',
b: '나',
c: '다'
};
for (let key in obj) {
console.log(key); // a, b, c
console.log(key, obj[key]); // a 가, b 나, c 다
console.log(key + ":" + obj[key]); // // a : 가, b : 나, c : 다
}
objec
타입으로 인식하기 때문에 아래와 같이 결과가 나오긴 한다. 그러나 일치하는 값이 아닌 해당 배열의 index
가 출력된다.let arr = [1, 2, 3];
for (let key in arr) {
console.log(key) // 0, 1, 2
}
기본 for of 문 문법
for ('변수선언 키워드' '루프변수명' of 객체) { // 객체의 모든 셀 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문; }
let array = [1, 2, 3];
for(let key of array) {
console.log(key); // 1, 2, 3
}
let string = 'hello';
for(let key of string) {
console.log(key); // h, e, l, l, o
}
let map = new Map([['a',1], ['b',2], ['c',3]]);
for(let key of map) {
console.log(key); // ['a', 1], ['b',2], ['c',3]
}
for(let[key,value] of map) {
console.log(`${key}=${value}`); // a=1, b=2, c=3
}
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
let iterable = [3, 5, 7];
iterable.foo = "hello";
for (let key in iterable) {
console.log(key); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let value of iterable) {
console.log(value); // 3, 5, 7
}