简单Javascript并不是我想要的那样工作
我想迭代数组,但是,在打印出数组中的所有值之后,它会打印一个未定义的值,我想知道为什么会发生这种情况,以及如何修复它。谢谢简单Javascript并不是我想要的那样工作,javascript,Javascript,我想迭代数组,但是,在打印出数组中的所有值之后,它会打印一个未定义的值,我想知道为什么会发生这种情况,以及如何修复它。谢谢 var utilities = { printAllMembers:function(targetObject){ for(i in targetObject){ document.write("<br>"+targetObject[i]); } } } var batman=[];
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));
var实用程序={
printAllMembers:函数(targetObject){
对于(目标对象中的i){
文件。写入(“
”+目标对象[i]);
}
}
}
var蝙蝠侠=[];
蝙蝠侠[0]=“蝙蝠侠”;
蝙蝠侠[1]=”batman@bat.man";
蝙蝠侠[2]=“男性”;
document.write(实用程序.printalmembers(蝙蝠侠));
它打印了一个未定义的,我想知道为什么会发生这种情况
因为你已经告诉它在这里:
document.write(utilities.printAllMembers(batman));
// ^
它将调用实用程序。printalmembers
,然后输出调用函数的结果。由于该函数不返回值,因此调用该函数的结果是未定义
…以及我如何修复它
只要叫它,只要叫它:
utilities.printAllMembers(batman);
旁注:不要使用for in
(没有保护措施)循环遍历数组索引,这不是它的用途。有一个完整的讨论和各种选择,你有循环通过数组
旁注2:您的代码受到攻击,因为您从未声明i
。请记住使用var
(通过ES5)或let
(ES6+,截至2015年8月尚未在野外得到很好的支持)声明变量。问题在于使用document.write()
两次-在printalmembers()
函数中以及调用该函数时。如上所述,for in
循环的格式不正确且使用不当-请使用常规的for循环
或while循环
,如下所示
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);
var实用程序={
printAllMembers:函数(targetObject){
var i=0;
while(i”+目标对象[i]);
i+=1;
}
}
};
var蝙蝠侠=[];
蝙蝠侠[0]=“蝙蝠侠”;
蝙蝠侠[1]=”batman@bat.man";
蝙蝠侠[2]=“男性”;
实用程序。打印所有成员(蝙蝠侠);
有关循环和迭代的更多信息,请参阅