Что не так с этим кодом? Я получаю:Ошибка, связанная с неопределенной переменной
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");
}
}
Вы никогда не определяете '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 –
Ваша ошибка '// здесь 'находится не в том месте. Это фактически строка выше (если условие), которая вызывает это, вызов 'old.age'. – Arth