简单的Javascript不能正常工作

时间:2015-08-02 10:28:31

标签: javascript

我想迭代数组,但是,在打印出数组中的所有值后,它打印出一个未定义的,我想知道为什么会发生这种情况以及如何解决它。谢谢!

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));

2 个答案:

答案 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-loopwhile-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