2012-05-02 6 views
1

Что не так с этим кодом? Я получаю:Ошибка, связанная с неопределенной переменной

TypeError: старше неопределен
(10 из диапазона 3)

но старшем определяется в начале: 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 old = people [0];' присваивает 'undefined'' old' и 'old.age' терпит неудачу. Не печатайте индексы, длины ('index <10'), как это. Просто добавьте элементы в массив в том порядке, в котором вы хотите их, и выполните итерацию по массиву. Вы получаете текущую длину с 'people.length'. Подробнее о массивах: https://developer.mozilla.org/ru/JavaScript/Guide/Predefined_Core_Objects#Array_Object –

+0

Ваша ошибка '// здесь 'находится не в том месте. Это фактически строка выше (если условие), которая вызывает это, вызов 'old.age'. – Arth

ответ

2

Вы никогда не определяют array[0] (называемый people[0] в вызове функции older10(array)), поэтому старший имеет значение undefined!

+0

Это правда, но когда я исправляю, я получаю: * TypeError: люди [index] не определены * –

+1

возможно, потому что массив [5] (и 6, 7) нет? –

+0

Вы правы, спасибо всем! –

Смежные вопросы