배열은 JavaScript의 객체이지만 AN For IN 루프를 사용하여 배열을 가로 지르는 것이 좋습니다. 실제로, 우리가 어레이를 위해 in in loop을 사용하지 못하게하는 데는 여러 가지 이유가 있습니다.
FOR IN 루프는 프로토 타입 체인의 모든 특성을 열거하고이를 방지하는 유일한 방법은 hasOwnproperty를 사용하여 판단하는 것입니다.
트래버스
최적의 성능으로 배열을 가로 지르는 가장 좋은 방법은 고전적인 루프를 사용하는 것입니다.
코드 사본은 다음과 같습니다.
var list = [1, 2, 3, 4, 5, ...... 10000000];
for (var i = 0, l = list.length; i <l; i ++) {
Console.log (list [i]);
}
여기에는 추가 트릭이 있습니다. 여기에는 배열의 길이를 l = list.length로 캐시합니다.
속성 길이는 배열 자체에 정의되지만 루프의 각 트래버스에는 여전히 오버 헤드가 있습니다. 최신 JavaScript 엔진 이이 상황에 대한 성능 최적화를 수행했을 수도 있지만 JavaScript 코드 가이 브라우저에서 항상 실행되도록 보장 할 수는 없습니다.
실제로 캐시 길이가없는 루프는 캐시 길이가있는 루프보다 훨씬 느립니다.
길이 속성
길이 속성은 getter 메소드를 통해 배열의 요소 수만 리턴하지만, 배열은 세터 메소드에 의해 잘릴 수 있습니다.
코드 사본은 다음과 같습니다.
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push (4);
foo; // [1, 2, 3, 정의되지 않은, 정의되지 않은, 정의되지 않은, 4]
길이 속성에 더 적은 숫자를 할당하면 배열이 잘립니다. 더 많은 숫자가 할당되면 배열이 잘리지 않습니다.
요약
최적의 성능을 위해서는 길이 속성을 캐싱하는 동안 루프를 위해 a 대신 루프를 사용하는 것이 좋습니다.
메소드가없는 배열 객체도 있으며 고유 한 속성 길이 만 있습니다. 문자열 객체에는 길이 방법 ~~가 있습니다