2012-04-06 2 views
0

Привет, я пытаюсь изучить Javascript с помощью codeacademy.com, и я достиг упражнений, которые, похоже, не имеют никакого смысла, когда зачем я это написал. Это мой код :Печать в консольных объектах массива

(function(){ 
    var bob = { 
     firstName: "Bob", 
     lastName: "Jones", 

     phoneNumber: "(650) 777 - 7777", 
     email: "[email protected]" 
    }; 

    var mary = { 
     firstName: "Mary", 
     lastName: "Johnson", 

     phoneNumber: "(650) 888 - 8888", 
     email: "[email protected]" 
    }; 

    var contacts = [bob, mary]; 

    var printPerson = function(person){ 
     console.log(person.firstName + " " + person.lastName); 
    } 

    var list = function(){ 
     var i = contacts.length; 
     for(var j= 0; j < i ; j++){ 
      printPerson(contacts[i]); 
     } 
    }; 

     list(); 
})(); 

проблема заключается в функции списка, когда я пытаюсь вызвать функцию printPerson() Я понимаю, что человек не определен, но, если я пишу вместо функции списка() это:

printPerson(contacts[0]); 
    printPerson(contacts[1]); 

Все работает. Что я делаю неправильно в функции list(), что он не работает?

ответ

4
var list = function(){ 
    var i = contacts.length; 
    for(var j= 0; j < i ; j++){ 
     printPerson(contacts[i]); 
    } 
}; 

i вот константа. Если вы замените его:

var list = function(){ 
    var i = contacts.length; 
    for(var j= 0; j < contacts.length ; j++){ 
     printPerson(contacts[contacts.length]); 
    } 
}; 

Для всех массивов arr, arr[arr.length] всегда будет неопределенным. Вероятно, вы хотите contacts[j].

+0

Я должен быть слепым или что-то не могу поверить, я не видел эту ошибку Thanks – user1146440

+0

@ user1146440: это легко сделать эту ошибку, когда вы называете переменную длину таким же образом, вы называете переменные индексации. назовите его 'length' вместо' i'; вы и все, кто читает ваш код, будут более здравомыслящими. – Claudiu

2
for(var j= 0; j < i ; j++){ 
    printPerson(contacts[i]); // this should be contacts[j] 
} 
0
var bob = { 
    firstName: "Bob", 
    lastName: "Jones", 
    phoneNumber: "(650) 777-7777", 
    email: "[email protected]" 
}; 

var mary = { 
    firstName: "mary", 
    lastName: "Johnson", 
    phoneNumber: "(650) 888 - 8888", 
    email: "[email protected]" 
}; 


var contacts=[bob,mary]; 
console.log(mary.phoneNumber); 
+0

Пожалуйста, добавьте немного объяснений в свой ответ для будущих посетителей. –