返回数组上的Javascript垃圾收集

mj_*_*mj_ 3 javascript arrays

我确信这对JS专家来说是一个简单的问题.不幸的是,我不是其中之一.

我有以下情况.我在函数b中创建了一个数组,我用一些新对象填充.然后我将该数组返回到函数a(调用函数b).

当我遍历返回的数组时,内容都是未定义的.关闭袖口我认为JS垃圾收集器可能涉及到这里.我该如何解决这个问题?

此致

MJ

function a()
{
    var x = b();

    for( var v in x ){
        //print out v.id and v.name
    }
}

function b()
{
    var y = new Array();
    var m = new Object();
    var n = new Object();
    m.id = 1;
    n.id = 2;
    m.name = "alpha";
    n.name = "bravo";

    y.push( m );
    y.push( n );

    return y;
}
Run Code Online (Sandbox Code Playgroud)

CMS*_*CMS 12

问题是你如何"迭代"你的数组.您正在使用该for-in语句,此语句应该用于枚举对象属性,而不是迭代数组或类似数组的对象.

从您的代码:

for( var v in x ){
    //print out v.id and v.name
}
Run Code Online (Sandbox Code Playgroud)

for-in每个循环语句将饲料v每个属性的名称,因为您使用的是阵列在你的榜样,v'0','1'等等.

您可以访问x[v]但我真的鼓励您使用顺序for循环,例如:

for (var i = 0; i < x.length; i++) {
  alert(x[i].id);
  alert(x[i].name);
}
Run Code Online (Sandbox Code Playgroud)

有许多原因可以避免for-in,当您的目的是对像对象这样的数组上的数字索引进行"迭代"时,请参阅以下问题以获取更多信息: