传递给函数后,数组会丢失

时间:2010-07-27 02:00:42

标签: javascript

对于下面的此方法,传入数组的长度为0,对于下面传递的数组属性未定义,并且不确定原因:

function BindAlbumDropdownList(aAlbums, defaultAlbumID)
{
    if(aAlbums.length == 0)
        return;

    var albumDropdownID = $("#abumDropdown").attr("id");

    AddDropdownItem("-Select an Album-", "-1", "albumDropdown");

    for(var a in aAlbums)
    {
        alert("a.name, a.id, albumDropdown: " + a.name + "|" + a.id + "|" +  albumDropdownID);
        AddDropdownItem(a.name, a.id, albumDropdownID);
    }
}

我正在传入一个先前在另一个调用此方法的方法中定义的数组,并且数组已经定义并像这样传递:

var aAlbums = GetAllAlbums(userID, accessToken);
var defaultAlbumID = aAlbums[0].id;

BindAlbumDropdownList(aAlbums, defaultAlbumID)

GetAllAlbums正在其中返回这样的变量设置:

var aFacebookAlbums = []; // array

并在填充后返回此数组。

但是当我在BindAlbumDropdownList中输入for循环时,我的数组属性未定义以及检查长度为零

这是警报给我的信息:

a.name, a.id, albumDropdown: undefined|undefined|albumDropdown

我很肯定GetAllAlbums正在返回一个包含值的数组,因为
var defaultAlbumID = aAlbum[0].id;为我提供了有效值

我注意到BindAlbumDropdownList似乎并不真正知道传入的aAlbums是一个数组,即使我将一个数组传递给它。因为我在尝试执行aAlbum.length时没有显示属性数组的intellisense,但是在我从GetAllAlbums函数返回之前,我确实得到了数组上的.length属性。

3 个答案:

答案 0 :(得分:1)

您应该使用for statement而不是for-in statement

for(i=0; i < aAlbums.length; i++)
{
    var a = aAlbums[i];
    alert("a.name, a.id, albumDropdown: " + a.name + "|" + a.id + "|" +  albumDropdownID);
    AddDropdownItem(a.name, a.id, albumDropdownID);
}

答案 1 :(得分:0)

你确定你包含jQuery好吗?选择器ID的“abumDropdown”是否正确?你可以在javascript中使用for ... in尽管不推荐使用。

答案 2 :(得分:0)

我以前从来没有得过一个,在我的兴奋中,我在评论中回答了哈哈!

如果你要求

的价值,你会得到什么?

0.name 1.name 2.name

现在,如果你要求

的价值,你会得到什么

一个[0]。名称 一个[1]。名称 一个[2]。名称

 for(var a in aAlbums)
    {
        alert("aAlbums[a].name, aAlbums[a].id, albumDropdown: " + a.name + "|" + a.id + "|" +  albumDropdownID);
        AddDropdownItem(aAlbums[a].name, aAlbums[a].id, albumDropdownID);
    }