2011-04-14 1 views
1

내가 아는 바에 따르면 자바 스크립트의 배열은 메서드와 개체의 조합에 불과합니다.IE 8 문제의 자바 배열

이제 내 임무는 내가 for(x in y_array)를 사용하고 값을 표시 한

(y_array 말) 배열의 값을 표시하는 것입니다.

mozilla와 IE에서는 잘 작동하지만 IE에서는 indexOf이라는 인덱스 배열의 첫 번째 요소를 표시하고 값은 indexOf(obj, from)입니다.

나는 그것은 일을하고 일을 잘했다하지만 배열의 광범위한 사용이 표시되어 나는 약간의 영구적 인 해결보다는이 하드 코딩 된 일을 찾고있다
if(x!='indexOf') { display the array value ; } 

을 시도했다.

아무도 도와 줄 수 있습니까? 배열

답변

10

을 up 배열과 객체.

배열은 행에서의 위치를 ​​사용하여 검색 할 수있는 값의 행입니다 :

이의 일을 설명하려고하자) SO 질문에 이런 종류의에 대한 FAQ를 포함해야합니다. 배열 값의 순서는 고정되어 있으며 재정렬 될 수 있습니다.

개체은 키 - 값 쌍의 형식으로 명명 된 속성을 포함하는 변수입니다. 객체에 속한 키 - 값 쌍의 순서는 임의적입니다. { first:'firstvalue', second:'secondvalue', ..., nth:'nthvalue' }

어레이의 첫 번째 요소는 인덱스 0 인 요소 (매우 행의 제 1 위치 갖는 인덱스 값 0)이다 같은 물체 보이는 [ 'first', 'second', 'third', ..., 'nth' ]
: 같이

배열 보인다. myArray[0]

개체는 순서가 지정되지 않으므로 첫 번째 요소가 없습니다. myObject.somekey 또는 myObject['somekey']을 사용하여 요소를 검색합니다. 당신은 배열이 끝날 때까지 번호가 매겨진 색인을 통해 반복 루프를 사용하여 배열

에 도달 할 때 : 객체의 경우

var i=0, len = myArray.length; 
for (i; i<len; i++) { 
    //do something with >>> myArray[i] <<< 
} 

당신이 키와 in 연산자를 사용하여 루프를 사용 (당신이 전용 만들기)에 .hasOwnAttribute 방법 대상물의 사용자 정의 속성을 검색 :

for (var key in myObject){ 
    if (myObject.hasOwnProperty(key)) { 
    // do something with >>> myObject[key] <<< 
    } 
} 

기본적으로, 서랍 찬장으로 배열 생각, 각각의 값을 포함.물건은 뚜껑에 스티커가있는 상자 더미로 상상할 수 있으며 상자의 내용을 설명합니다. 객체에서 무언가를 꺼내면 다음과 같이 묻습니다. x 파일에 스티커 y가있는 상자가 있습니까? 그렇다면 무엇이 들어 있습니까?? 배열에서 무언가를 가져 오는 중, 당신은 묻습니다. 서랍 nr x의 내용을 알려주십시오. 질문에 관해서는 이제

: 당신은 for..in 루프에 대한 값을 검색하는 배열은 사용자 정의 방법, 즉 indexOf이 포함되어 있습니다. 객체 스타일 루프를 사용하면 배열이 객체로 처리되고 키 (값이 function(){...} 인 것)가 표시됩니다. IE 그래서 배열을 반복 할 때 숫자 인덱스가있는 전통적인 for 루프를 사용하는 것이 더 좋습니다.

이유는 IE에만 ​​있습니까? 최신 브라우저에서는 indexOfArray 프로토 타입의 기본 메소드이며 원시 메소드는 표시되지 않습니다 (프로토 타입을 반복하지 않는 한). IE < 9 배열에 대한 네이티브 indexOf 메서드가 없습니다. 스크립팅에서 사용자가 정의한 확장으로 Array 프로토 타입에 메서드가 추가되었습니다.

문제의 주요 내용 : for ... in을 사용하여 배열의 값을 반복하지 마십시오.

+0

참고 myObject.hasOwnProperty (key)를 사용해야했습니다. 왜 그런지 잘 모르지만 위의 경우 문제가 생기면 도움이 될 것입니다 – cowls

+1

@cowls : 잘 보입니다. 그것은 믹스/오타였습니다. 나는 대답을 수정했습니다. – KooiInc

6

당신은 루프를 위해 이것을 사용한다 : 객체의 경우

var y_array = [1,2,3,4]; 
for (var i = 0; i < y_array.length; i++) { 
    var value = y_array[i]; 
    // do what you want 
    alert(i + ': ' + value); 
} 

(객체가 연관 배열처럼 - 특성 : 값)이 루프를 사용 : 당신은 제 1 혼합하지

var y_array = { prop_1 : "value a", prop_2: "value_2", prop_3: 333 } 
for (var key in y_array) { 
    var value = y_array[key]; 
    // do what you want 
    alert(key + ': ' + value); 
} 
+0

이 내 질문이 무엇인지되지 않습니다. IE에서 배열의 첫 번째 키로 메소드를 건너 뜁니다. 키를 일치 시키려고했는데 (x! = 'indexOf') 그렇지만 코드가 하드 코드되었으므로 많은 영구 배열이 필요합니다. –

+0

모든 기능 또는 indexOf 만 건너 뛰시겠습니까? –

+0

배열의 첫 번째 요소 인 indexOf를 생략하고 싶습니다. 그 기능이나 좋은 해결책을 수행하는 함수 또는 메서드가 있습니까? –

0

jsonbobj = {}와 같은 json 개체에 값이없는 경우. 그렇다면 index0f 프로토 타입 함수가 IE <에있는 빈 객체에 있습니다. (function() {...}과 같은 값으로) 역시 표시됩니다.

귀하는 for 루프의 상태를 점검 할 수 있습니다. 그 indexOf를 건너 뜁니다.

(키 == '같이 IndexOf')이 경우

{계속}

는 예컨대 : 당신은 나를 잘못 파벨를 가지고

var jsonObj = { key_1 : "value a", key_2: "value_2", key_3: 333 } 
for (var key in y_array) { 
if(key == 'indexOf'){continue;}   // check if the array contain indexOf 
    var value = y_array[key]; 
    // do what you want 
    alert(key + ': ' + value); 
}