배열은 Javascript의 객체이지만 배열을 순회하기 위해 for in 루프를 사용하는 것은 권장되지 않습니다. 실제로 배열에서 for in 루프를 사용하지 못하게 하는 데는 여러 가지 이유가 있습니다.
for in 루프는 프로토타입 체인의 모든 속성을 열거하고 이를 중지하는 유일한 방법은 hasOwnProperty를 사용하여 판단하는 것이므로 이는 일반 for 루프보다 훨씬 느립니다.
트래버스
최고의 성능을 위해 배열을 반복하는 가장 좋은 방법은 클래식 for 루프를 사용하는 것입니다.
여기서 추가 트릭은 l = list.length를 통해 배열 길이를 캐시하는 것입니다.
길이 속성이 배열 자체에 정의되어 있더라도 루프의 각 반복에는 여전히 오버헤드가 있습니다. 최신 Javascript 엔진에는 이 상황에 대한 성능 최적화 기능이 있을 수 있지만 Javascript 코드가 항상 이 브라우저에서 실행된다는 보장은 없습니다.
실제로, 캐시되지 않은 길이가 있는 루프는 캐시된 길이가 있는 루프보다 훨씬 느립니다.
길이 속성
length 속성은 getter 메소드를 통해 배열의 요소 개수만 반환하지만, setter 메소드를 통해 배열이 잘릴 수 있습니다.
length 속성에 더 작은 숫자를 할당하면 배열이 잘리고, 더 큰 숫자를 할당하면 배열이 잘리지 않습니다.
요약
최적의 성능을 위해서는 for in 루프 대신 for 루프를 사용하고 길이 속성을 캐시하는 것이 좋습니다.
메서드가 없고 고유한 속성 길이가 하나만 있는 배열 객체도 있습니다. 문자열 객체에는 길이 방식이 있습니다~~