JavaScript의 4가지 for 반복문(for, forEach, for...of, for...in)의 차이점을 소개합니다.
for...in문
for...in
문은 객체의 속성을 반복하기 위해서 열거형과 함께 사용되며, EcmaScript6에 도입되었습니다.
let userInfo = {
name: 'Kang JaeSeong',
age: 30,
address: 'Busan'
};
for (let key in userInfo) {
console.log(`${key}: ${userInfo[key]}`);
}
실행 결과
배열도 JavaScript에서는 객체이므로 for...in
문을 사용할 수 있습니다.
let arrNum = [1, 2, 3];
for (let value in arrNum) {
console.log(`value: ${value}`);
}
실행 결과
정상적으로 실행되지만, 배열을 for...in
문에 사용할 경우 두 가지 주의사항이 있습니다.
- 배열에 반복문을 사용하는 경우
for...in
문은for...of
문보다 처리 속도가 훨씬 느립니다. - 배열의 요소에 일관성 없는 데이터가 존재하는 경우
첫 번째 주의사항은 대부분 알고 있는 사실이며, 두 번째 주의사항인 일관성 없는 데이터는 다음과 같습니다.
let arrJobs = ['Hunter', 'Knight'];
arrJobs.job = 'Wizard';
for (let element in arrJobs) {
console.log(`${element} is ${arrJobs[element]}`);
}
실행 결과
문자열 배열 arrJobs
에는 일관성 없는 데이터가 추가되었으며, for...in
문은 속성을 반복하므로 정상적으로 동작합니다. 이렇게 일관성 없는 데이터가 존재하는 경우 애플리케이션을 배포하기 전에 문제가 되는 코드를 찾기가 어려우며, 애플리케이션을 배포 후 문제가 발생할 가능성이 존재합니다.
for...of문
for...of
문 또한 EcmaScript6에 도입되었으며 반복 가능한(iterables) 객체만 사용할 수 있습니다.
반복 가능한(iterables) 객체 목록
- 배열
- 문자열
- Set 객체와 Map 객체
- NodeList
반복적이지 않은 요소가 for...of
문을 사용하는 경우 TypeError가 발생합니다.
다음은 Number 타입인 변수가 for...of
문을 사용하는 예제입니다.
let num = 5;
for (let item of num) {
console.log('loop');
}
실행 결과
for...of
문은 본문에서 continue, break, yield와 같은 제어 흐름을 사용할 수 있으며, forEach
보다 빠르다는 장점이 있습니다.
foreEach문
forEach
문은 최대 3개의 인수를 가지는 콜백 함수가 존재합니다.
array.forEach(callback(currentElement, index, array) {
//...로직 작성
});
매개변수
- currentElement: 현재 배열의 요소
- index: 현재 배열 요소의 인덱스
- array: 반복되는 배열(forEach문을 호출한 배열)
forEach
문은 for...of
문과 달리 인덱스를 접근할 수 있는 방법이 존재합니다.
또 다른 차이점은 forEach
문 첫 번째 인수인 현재 배열의 요소는 로컬 범위(Local Scope)이지만, for...of
문은 그렇지 않습니다.
forEach문
let num = 10;
let arrNum = [1, 2, 3];
arrNum.forEach(num => {
console.log(`num: ${num}`);
});
console.log(`num: ${num}`);
실행 결과
forEach
문 외부에 선언된 변수 num
의 값은 변경되지 않습니다.
for...of문
let num = 10;
let arrNum = [1, 2, 3];
for(num of arrNum) {
console.log(`num: ${num}`);
}
console.log(`num: ${num}`);
실행 결과
하지만, for...of
문을 사용한 경우 본문 외부에 선언된 num
변수의 값을 덮어씁니다.
본문 외부에 선언된 변수의 값이 덮어 쓰이는 것을 원하지 않는 경우 for...of
문 내부에 사용되는 변수를 let 키워드로 선언합니다.
let num = 10;
let arrNum = [1, 2, 3];
for(let num of arrNum) {
console.log(`num: ${num}`);
}
console.log(`num: ${num}`);
실행 결과
for 문
for
문은 JavaScript에서 가장 오래되고 전통적인 반복문입니다. 누구나 쉽게 접근할 수 있지만, for
문에서 작성된 로직이 간단하지 않은 경우 추후 코드 분석이 어려울 수 있습니다.
요약
- 배열의 경우
for...of
문 또는forEach
문을 사용합니다. - 객체의 경우
for...in
문을 사용합니다. - 배열을 반복문으로 순회하여 값과 인덱스에 접근해야 하는 경우
for
또는forEach
문을 사용합니다.
'JavaScript > Tip' 카테고리의 다른 글
[JavaScript]변수가 정의되었는지 확인하는 방법 (0) | 2022.07.03 |
---|---|
[JavaScript]NaN 체크 방법 (0) | 2022.03.27 |
[JavaScript]강제 형 변환(type coercion) (0) | 2022.03.25 |
[JavaScript]언더바 변수 (1) | 2022.03.20 |
[JavaScript]if문 간결화 (0) | 2022.01.07 |
댓글