← Back to NOTES 🌰
← Effective JavaScript 🤿
← 아이템 45 - 프로토타입 오염을 막기 위해 hasOwnProperty를 사용하라
핵심 요약
자바스크립트 객체의 프로퍼티 순서는 ECMAScript 명세에서 보장되지 않는다. for...in 루프에서 프로퍼티 열거 순서는 JavaScript 엔진의 구현에 따라 달라질 수 있으므로, 순서에 의존하는 연산은 예측할 수 없는 결과를 초래할 수 있다. 순서가 중요한 데이터는 배열을 사용하고, 순서에 민감하지 않은 연산을 설계하거나 명시적으로 정렬해야 한다.
자세한 내용
객체 프로퍼티 순서의 불확실성
- ECMAScript 명세: 객체 프로퍼티 열거 순서는 구현에 따라 다름
- 브라우저별 차이: 같은 코드도 브라우저마다 다른 순서로 실행될 수 있음
- 부동소수점 연산: 순서에 따라 정밀도 오차가 누적되어 다른 결과 산출
- 예측 불가능성: 개발 환경과 실제 환경에서 다른 결과 가능
순서 의존성의 위험
- 수치 연산 오차: 부동소수점 연산의 순서에 따른 정밀도 차이
- 알고리즘 결과 변화: 순서에 민감한 알고리즘의 잘못된 결과
- UI 렌더링 차이: 화면 표시 순서의 예측 불가능성
- 데이터 처리 불일치: 배치 처리 결과의 일관성 부족
안전한 대안
- 배열 사용: 순서가 중요한 데이터는 배열로 저장
- 명시적 정렬: 필요시
Object.keys()로 키를 정렬 후 처리
- 순서 무관 설계: 연산 결과가 순서에 영향받지 않도록 설계