← Back to NOTES 🌰
← Effective JavaScript 🤿
← 아이템 48 - 열거하는 동안 객체를 수정하지 마라
핵심 요약
for...in 루프는 배열의 인덱스가 아닌 프로퍼티 이름(문자열)을 열거하므로 배열 반복에 적합하지 않다. 배열에 비숫자 프로퍼티가 있거나 프로토타입 체인에 열거 가능한 프로퍼티가 있으면 예상치 못한 결과가 나온다. 배열 반복에는 전통적인 for 루프나 forEach, map, filter 같은 배열 메서드를 사용하라. 특히 수치 계산이나 타입에 민감한 작업에서는 반드시 적절한 반복 방법을 선택해야 한다.
자세한 내용
for...in의 배열 반복 문제점
- 문자열 키 반환: 배열 인덱스를 숫자가 아닌 문자열로 반환
- 의도치 않은 프로퍼티 포함: 배열에 추가된 비숫자 프로퍼티도 열거
- 프로토타입 오염: Array.prototype에 추가된 프로퍼티까지 포함
- 타입 혼동: 문자열 인덱스로 인한 수치 계산 오류
적절한 배열 반복 방법
- for 루프: 성능이 중요하거나 인덱스 제어가 필요한 경우
- forEach: 단순 반복과 부수 효과가 목적인 경우
- map: 새로운 배열을 생성하는 변환 작업
- filter: 조건에 맞는 요소만 선별
- reduce: 누적 계산이나 단일 값 생성
성능 고려사항
- for 루프: 가장 빠른 성능, 브레이크와 컨티뉴 가능
- 배열 메서드: 함수형 프로그래밍 스타일, 가독성 우수