我想迭代数组,但是,在打印出数组中的所有值后,它打印出一个未定义的,我想知道为什么会发生这种情况以及如何解决它。谢谢!
var utilities = {
printAllMembers:function(targetObject){
for(i in targetObject){
document.write("<br>"+targetObject[i]);
}
}
}
var batman=[];
batman[0]="batman";
batman[1]="batman@bat.man";
batman[2]="male";
document.write(utilities.printAllMembers(batman));
答案 0 :(得分:3)
它打印出一个未定义的,我想知道为什么会发生这种情况......
因为你已经告诉过它了:
document.write(utilities.printAllMembers(batman));
// ^
这将调用utilities.printAllMembers
,然后它将输出调用该函数的结果。由于函数没有返回值,因此调用它的结果为undefined
。
......以及我如何解决它
要调用它,只需调用它:
utilities.printAllMembers(batman);
旁注:不要使用for-in
(没有安全措施)循环遍历数组索引,这不是它的用途。 This answer有一个完整的讨论和循环数组的各种选项。
附注2:您的代码正在成为The Horror of Implicit Globals的牺牲品,因为您从未声明i
。请务必使用var
(通过ES5)或let
声明您的变量(ES6 +,截至2015年8月尚未得到很好的支持)。
答案 1 :(得分:0)
当您调用该函数时,问题是document.write()
两次使用printAllMembers()
函数和。如上所述,for-in
循环格式错误且被滥用 - 而是使用常规for-loop
或while-loop
,如下所示。
var utilities = {
printAllMembers:function(targetObject){
var i = 0;
while(i < targetObject.length){
document.write("<br>"+targetObject[i]);
i += 1;
}
}
};
var batman=[];
batman[0]="batman";
batman[1]="batman@bat.man";
batman[2]="male";
utilities.printAllMembers(batman);
有关循环和迭代的详细信息,请参阅This Link。