2012-05-02 2 views
1

이 코드의 잘못된 점은 무엇입니까? 내가 얻을 :정의되지 않은 변수와 관련된 오류

형식 오류 : 나이가 처음에 정의되어

하지만 나이가 정의되지 않은
(범위 3 중 10)이다 var older = people[0]

function person(name, age) { 
    this.name=name; 
    this.age=age 
} 

function foo() { 
    var older10 = function(people) { 
     var older = people[0]; 

     for (var index = 1; index < 10; index++) { 
      if (people[index].age > older.age) { 
       older = people[index]; // error here 
      } 
     } 
     return older; 
    }; 

    var array = []; 
    array[1] = new person("Paul", 23); 
    array[2] = new person("Jim", 24); 
    array[3] = new person("Sam", 84); 
    array[4] = new person("Rob", 54); 
    array[8] = new person("Karl", 19); 
    array[9] = new person("", 0); 

    var older = older10(array); 

    if (older.name === "Sam") { 
     console.log("ok"); 
    } 
} 
+2

'people [0]'('array [0]')을 정의하지 않기 때문에'var older = people [0];'는'undefined'를'older'에 할당하고'old.age'는 실패합니다. 이와 같이 인덱스, 길이 ('index <10')를 하드 코딩하지 마십시오. 항목을 원하는 순서대로 배열에 추가하고 배열을 반복합니다. 'people.length'로 현재 길이를 얻습니다. 배열에 대해 더 자세히 읽어보십시오. https://developer.mozilla.org/en/JavaScript/Guide/Predefined_Core_Objects#Array_Object –

+0

'여기 // 오류가 있습니다.'는 잘못된 위치에 있습니다. 실제로는 위의 행 (조건 인 경우)이 원인입니다 그것은'old.age'에 대한 호출입니다. – Arth

답변

2

당신은 array[0]을 정의하지 (people[0]로 함 older10(array) 함수 호출 내에서) old가 undefined로 설정되었습니다!

+0

사실,하지만 수정하면 얻을 수 있습니다 : * TypeError : 사람들 [인덱스] 정의되지 않았습니다 * –

+1

아마 배열 [5] (및 6, 7) 존재하지 않기 때문에? –

+0

네가 맞아, 고마워! –