for
어떤 유한한 횟수만큼 반복할 때는 for문을 사용한다.
특정 숫자를 가지고 숫자의 값을 비교하고, 증감해주면서 반복한다.
for (초기 구문; 반복 조건; 변화 구문(=반복이 된 후 실행되는 코드)) { 반복이 되는 코드 블럭 }
for (let i = 0; i < 10; i++) {
console.log(i);
}
// 0 부터 9 까지 출력
for (a; b; c) {d} e
- 반복이 실행되는 순서: a - d - c- b - d - c - b - e
- 반복문 즉시 종료: 반복되는 블럭 안에서
break
를 실행한다. - 반복되는 블럭 안에서
continue
를 만나면 거기서 해당 순서를 건너뛰고 다음 반복을 실행한다. for (;;) {d}
: 무한루프. 반복조건을 작성하지 않은 코드 d 무한 반복
// 초기화 하면서 선언된 변수를 중괄호 안 반복 블럭에서 사용할 수 있다.
for (let i = 0; i < 5; i++) {
console.log('안녕하세요', i);
}
for (let i = 0, j = 5; i < 5; i++) {
console.log('안녕하세요', i, j);
}
for (let i = 0, j = 2; i < 5; i++, j = j * j) {
console.log('안녕하세요', i, j);
}
// 반복문을 즉시 종료하고 싶을 때는 반복되는 블럭 안에서 break; 를 실행하면 가능하다.
for (let i = 0; i < 5; i++) {
if (i > 2) {
break;
}
console.log('안녕하세요', i);
}
// 반복되는 블럭 안에서 continue; 를 만나면 거기서 바로 해당 블럭은 종료한다.
// 그리고 이와 같이 다음 반복이 있으면 다음 반복으로 넘어간다.
for (let i = 0; i < 5; i++) {
console.log(i);
if (i < 2) {
continue;
}
console.log('안녕하세요', i);
}
// for 무한 루프
for (;;) {
console.log('안녕하세요');
if (Math.random() * 100 > 90) { // 랜덤한 값이 90이 이상이 나오면 break;
break;
}
}
배열과 for
const names = ['멍멍이', '야옹이', '멍뭉이'];
for (let i = 0; i < names.length; i++) {
console.log(names[i]);
}
이와 같이 작성하면 배열 안에 있는 원소들을 하나하나 나열할 수 있다.
while
while문은 특정 조건이 참이라면 계속해서 반복하는 반복문이다.
for문이 숫자의 값을 비교하고 증감하며 반복한다면, while문은 조건을 확인만 하면서 반복한다.
조건이 거짓이 될 때까지 코드를 반복한다. 조건을 먼저 판단 후, 코드를 실행한다. 때문에 조건문 내부에서 변화를 직접 주어야 한다.
while (조건) { 조건이 거짓이 될 때까지 반복 실행 }
let i = 0;
while (i < 10) {
console.log(i);
i++;
}
while문을 사용할 때에는 조건문이 언젠가 false가 되도록 신경써야 한다. 조건문이 언젠가 false로 전환되지 않는다면 반복문이 끝나지 않고 무한루프에 빠지게 된다.
do while
do { 조건이 거짓이 될 때 까지 반복 실행 } while (조건);
코드를 먼저 실행 후, 조건을 판단한다.
while과 다른 점은 무조건 코드가 먼저 실행되기 때문에 조건에 의해 값이 맞지 않더라도 한 번은 실행되게 된다.
do {
console.log('안녕하세요');
} while (Math.random() * 100 <= 90);
for...of
- 배열에 관한 반복문을 돌리기 위해 만들어진 반복문이다.
- iterable한 개체에 모두 사용가능하다. (*iterable: 반복할 수 있는)
- iterable한 프로토콜을 자체적으로 내장하고 있는 개체: 배열 등에 사용하면 요소가 하나씩 순서대로 출력된다.
for (const i of [1, 2, 3]) {
console.log(i);
}
// 1 2 3
사실 이 구문은 배워놔도 사용 할 일이 별로 없다. 보통 배열을 반복할 때에는 배열의 내장함수를 많이 사용한다. 그래도 알아는 두자.
for...in
- 객체를 위한 반복문
- 모든 프로퍼티에서 사용 가능 (객체에서도 가능)
- 객체 안에 있는 프로퍼티 하나하나를 for in을 통해서 반복한다.
- runtime 환경에 따라 다르게 작동할 수 있으므로 주의해서 사용한다.
const doggy = {
name: '멍멍이',
sound: '멍멍',
age: 2
};
for (let key in doggy) {
console.log(`${key}: ${doggy[key]}`);
}
break와 continue
반복문 안에서는 break
와 continue
를 통하여 반복문에서 벗어나거나, 그 다음 루프를 돌게끔 할 수 있다.
for (let i = 0; i < 10; i++) {
if (i === 2) continue; // 다음 루프를 실행
console.log(i);
if (i === 5) break; // 반복문을 끝내기
}
i 가 2 일 땐 continue
를 하여 원래 console.log 를 해야 하지만 그 코드를 수행하지 않고 바로 3으로 넘어간다.
i 가 5 일 땐 break
를 하여 반복문을 종료시킨다.