2013-03-27 4 views
4

이 같은 개체를 만드는 경우 : 이제할당 객체

building[45] = new Object();   
building[45].name = myName; 
building[45].price = parseInt(myPrice); 

building[128] = new Object();  
building[128].name = myName;  
building[128].price = parseInt(myPrice); 

내가 브라우저가되지 않도록 더 나은 임시 변수에 할당되는 함수에 building[128]를 사용하고자하는 경우를 building[128] 속성을 찾기 위해 모든 객체를 반복해야합니까?

예 :

var theID = 128; 
var temp = building[theID]; //temp.name & temp.price 

하거나 building[theID].name를 사용하여 직접 building[theID].price?

조회 방법에 차이가 있습니까?

+0

아니요 차이가 없습니다 – theshadowmonkey

+0

@thehadowmonkey 지원을 제공해 주시겠습니까? (나는 단지 호기심이지만 증거의 일종을 원한다) –

+0

같은데 데이터가 어떻게 메모리에서 검색되는지에 대한 기술적 정보를 알고 싶다. – Sir

답변

4

배열 액세스는 상수 시간 연산입니다 (Big-O 표기법의 경우 O(1) 임). 즉, 브라우저는 이 아니며은 12733 개가 넘는 항목을 반복해야 building[128]에 액세스해야합니다.

그런 경우에도 배열 항목을 변수에 저장하는 것이 좋습니다. 이렇게하는 가장 큰 이유는 JavaScript 축소 프로그램이 변수 이름을 a과 같이 짧게 바꿀 수 있기 때문에 속성 액세스가 a.name이되는 것입니다. 이렇게하면 여기저기서 몇 바이트가 절약되고 큰 스케일에서는 전체 바이트 절약이 중요합니다.

JavaScript 배열은 JavaScript 개체의 특수 형식이며 배열 인덱스는 실제로 정수가되는 속성 이름보다 약간 큽니다. 배열의 플래너의 정의, 당신은 그것의 인덱스로 배열 항목에 액세스 할 때마다 사용 이 JavaScript: The Definitive Guide, David Flanagan

, 효과적으로 두 단계 과정을 시작 : 배열 개체에 액세스, 다음 (속성 이름 값을 찾아 색인). 변수에 배열 항목을 저장하면 메모리에있는 값을 살펴 보는 것만 큼 쉽게 액세스 할 수 있습니다.

+0

그래서'building [128]'은 임시 var와 동일한 방법으로 포인터가됩니까? – Sir

+0

배열을 반복하는 것이 O (1) – theshadowmonkey

+1

@theshadowmonkey 어 ... 아니요, 배열을 반복 할 때 O (N) –

0

다른 방법으로는 다음과 같이 만들 수 있습니다 :

building[45] = { 
    name: myName, 
    price: parseInt(myPrice, 10) 
}; 

building[128] = { 
    name: myName, 
    price: parseInt(myPrice, 10) 
}; 

편집 : 아, 나는 귀하의 질문에 나는 그것을 읽을 방법과 다른 참조하십시오. 죄송합니다. 도움이 될 수 있기 때문에이 답변을 계속하겠습니다.