서로 다른 순회 대상과 사용 목적
기본 개념 비교
구분 | for...in |
for...of |
---|---|---|
순회 대상 | 속성(key, 인덱스)으로 순회할 수 있는 객체 | 값(value)으로 순회할 수 있는 객체 |
루프 | 객체에서 가져온 속성(key, 인덱스)으로 작동 | 객체에서 가져온 값(value)으로 작동 |
사용 가능한 객체 |
|
|
사용 용도 | 객체의 속성(key)을 순회할 때 사용 | 객체의 값(value)을 순회할 때 사용 |
사용 목적 | 데이터를 다루는 것 보다는 주로 일반 객체(Plain objects)의 특정 값(value)을 가지는 속성(key)을 확인하는 디버깅용 | 객체의 값(value) 즉, 데이터를 다루기 위해 |
예제
for...in
for...in
문은 주로 순회를 통해 데이터를 다루는 것 보다는 일반 객체(Plain objects)의 특정 값(value)을 가지는 속성(key)을 확인하는 디버깅용으로 사용됩니다.
const user = {
name: "철수",
age: 30
}
for (let key in user) {
console.log(key, ":", user[key]);
}
/*
출력:
"name" : "철수"
"age" : 30
*/
for...of
<ul>
<li>김밥</li>
<li>라면</li>
<li>떡볶이</li>
</ul>
const liElements = document.querySelectorAll("li"); // li 선택자를 모두 선택
console.log(liElements); // NodeList(3) [li, li, li]
/* for...of 문 적용 */
for (const liElement of liElements) {
console.log(liElement.textContent);
}
// 출력: "김밥" "라면" "떡볶이"
코드 부연설명
querySelectorAll()
로 반환된 NodeList
객체는 유사 배열 객체이면서 for...of
문으로 순회 가능한 객체입니다.
고려할 점
명세서
명세서 사양 | |
---|---|
for...in, for...of
|
ECMAScript Language Specification #sec-for-in-and-for-of-statements |
브라우저 호환성
문 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
for...in
|
1 | 12 | 1 | 1 |
for...of
|
38 | 12 | 13 | 7 |