특정 명령을 반복해서 수행할 수 있도록 도와주는 문법
For 반복문
- 루프의 핵심은 어떤 기능을 반복하는 것
- 1부터 10까지 출력하기
for (let i = 1; i <= 10; i ++) {
console.log(i);
}
- 루프에 대해 새로운 변수를 만든다. (
i
) - 세미콜론을 기준으로 중간 부분은 얼마나 오랫동안 혹은 언제까지 루프를 실행할지 명령하는 조건이 있다. 루프가 계속 실행되기 위해서는 조건이 참이 되어야 한다. 조건이 거짓이 되면 루프 종료
- 마지막 부분은 증감 표현식 (
i
값을 업데이트)
무한 루프의 위험성
- 멈추지 않는 루프
- 루프가 멈추지 않으면 JavaScript가 가진 메모리를 모두 사용하게 된다.
- 이 조건이 거짓이 될 것인가? 를 생각해보기
배열 루프
- 배열의 각 요소에 대해 어떤 기능을 반복시키기
- 배열의 모든 요소에 접근하는 법 : 배열의 길이를 구하는
.length
와 인덱스 활용
for (let i = 0; i < array.length; i++) {
console.log(array[i]);
}
for (let i = array.length; i >= 0; i--) {
console.log(array[i]);
}
중첩 루프
- 보통 중첩되는 for 루프 변수로는
i
,j
,k
를 사용한다. - 중첩 루프는 보통 중첩된 배열을 통과하거나 반복해야 할 때 사용된다.
const food = [
['apple', 'banana', 'strawberry'],
['onion', 'carrot', 'paprika'],
['pizza', 'hamberger', 'chicken']
]
for (let i = 0; i < food.length; i++) {
const row = food[i];
for (let j = 0; j < row.length; j++) {
console.log(row[j]);
}
}
for... of
문으로 개선할 수 있다.
While 루프
- while 구문 하나와 괄호 안에 조건문 하나
- 조건이 참이면 계속 반복하고, 거짓이면 루프를 종료한다.
const SECRET = "password2";
let pwd = prompt("enter the secret code...");
while (pwd !== SECRET) {
pwd = prompt("enter the secret code...");
}
console.log("WELCOME!!!");
정지 / break 키워드
let cnt =0;
while (true) {
if (cnt==5) break;
console.log(cnt);
cnt++;
}
- while 조건이 참이고 break가 없으면 계속 반복한다.
for 루프의 유용함
for... of 문
*for (variable of iterable) {
statement
}*
- 배열 또는 문자열 등의 반복 가능한 객체(iterable object)에서 반복시키는 기능이 많이 개선되었다.
- 가독성이 좋아짐.
const foods = [
['apple', 'banana', 'strawberry'],
['onion', 'carrot', 'paprika'],
['pizza', 'hamberger', 'chicken']
]
for (let row of foods) {
for (let food of row) {
console.log(food);
}
}
객체 루프
- for ... of 문은 반복 가능한 객체에서 사용할 수 있다고 했는데, 실제 객체 즉, 객체 리터럴을 반복시킬 때도 사용할 수 있을 것 같다.
- 하지만 실제 객체 리터럴은 반복 가능한 객체로 인식되지 않는다.
- 엄밀히 말하면, 시스템 상으론 배열과 문자열, Map, Set도 객체다.
- 굳이 객체 리터럴에 쓰려면
for... in
문을 쓰면 되는데, 잘 쓰이지 않음. Object.keys()
와Object.values()
,Object.entries()
를 사용하자.
const testScores = {
hong: 100,
jeong: 90,
kim: 85,
lee: 73
}
for (let person in testScores) { // 객체의 key가 person이 됨
console.log(`${person} scored ${testScores[person]}`);
}
// 혹은
for (let score of Object.values(testScores)) {
console.log(score);
}
// 점수 총합
let total = 0;
for (let score of Object.values(testScores)) {
total += score;
}
// 점수 평균
let total = 0;
let scores = Object.values(testScores);
for (let score of scores) {
total += score;
}
console.log(total / scores.length);
'JavaScript' 카테고리의 다른 글
[JS] 스코프와 호이스팅 (0) | 2022.08.03 |
---|---|
[JS] 함수 (0) | 2022.08.03 |
[JS] 객체 (0) | 2022.07.02 |
[JS] 배열 (0) | 2022.07.02 |
[JS] 조건문 (0) | 2022.07.02 |
댓글